Kotlin 允许在函数中定义数据 class,为什么?
Kotlin allows defining data class in a function, why?
在 kotlin 中,这是合法的:
fun f1(): Int {
data class Data(val i: Int)
val d = Data(0)
return d.i
}
我想知道在函数中声明数据 class 的后果是什么。我最好的猜测是数据 class 是函数的范围,但我在文档中没有找到任何提及的内容。
这叫做本地类。 documentation 中提到了它们,但只是说它们不能具有可见性修饰符。
- 您不能访问本地 class 在其中声明的函数之外的任何地方。
- 它可以访问包含 class 的任何成员,包括私有成员。
- 它可以访问声明函数范围内的任何局部变量或方法参数
您可以查看 Java's local classes 了解更多信息。应该基本一样。
一个典型的用例是 throw-away 实现某个接口。
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)
}
在 kotlin 中,这是合法的:
fun f1(): Int {
data class Data(val i: Int)
val d = Data(0)
return d.i
}
我想知道在函数中声明数据 class 的后果是什么。我最好的猜测是数据 class 是函数的范围,但我在文档中没有找到任何提及的内容。
这叫做本地类。 documentation 中提到了它们,但只是说它们不能具有可见性修饰符。
- 您不能访问本地 class 在其中声明的函数之外的任何地方。
- 它可以访问包含 class 的任何成员,包括私有成员。
- 它可以访问声明函数范围内的任何局部变量或方法参数
您可以查看 Java's local classes 了解更多信息。应该基本一样。
一个典型的用例是 throw-away 实现某个接口。
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)
}