首页 > 解决方案 > Kotlin 允许在函数中定义数据类,为什么?

问题描述

在 kotlin 中,这是合法的:


fun f1(): Int {
    data class Data(val i: Int)

    val d = Data(0)

    return d.i
}

我想知道在函数中声明数据类的后果是什么。我最好的猜测是数据类的范围是函数,但我在文档中没有找到任何提到这一点的内容。

标签: kotlindata-class

解决方案


这称为本地类文档中提到了它们,但只是它们不能具有可见性修饰符。

  • 您不能在声明它的函数之外的任何地方访问本地类。
  • 它可以访问包含类的任何成员,包括私有成员。
  • 它可以访问声明函数范围内的任何局部变量或方法参数

您可以查看Java 的本地类以获取更多信息。应该基本一样。

一个典型的用例是对某些接口进行一次性实现。

fun main() {
    val f1 = f1()

    println(f1.x)
    println(f1.y)
}

interface Data {
    val x : Int
    val y : Int
}

fun f1(): Data {
    data class SpecificData(override val x: Int, override val y: Int) : Data

    return SpecificData(5, 10)
}

推荐阅读