kotlin - Kotlin 允许在函数中定义数据类,为什么?
问题描述
在 kotlin 中,这是合法的:
fun f1(): Int {
data class Data(val i: Int)
val d = Data(0)
return d.i
}
我想知道在函数中声明数据类的后果是什么。我最好的猜测是数据类的范围是函数,但我在文档中没有找到任何提到这一点的内容。
解决方案
这称为本地类。文档中提到了它们,但只是它们不能具有可见性修饰符。
- 您不能在声明它的函数之外的任何地方访问本地类。
- 它可以访问包含类的任何成员,包括私有成员。
- 它可以访问声明函数范围内的任何局部变量或方法参数
您可以查看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)
}
推荐阅读
- actions-on-google - 在谷歌操作中用测试 URL 覆盖 webhook URL 不起作用
- python - 在已安装的包中出现导入错误 - h5py
- xamarin - Xamarin 表单自定义可绑定属性未更新
- algorithm - Dijkstra 的算法是启发式的吗?
- c++ - 从结构的名称及其成员的名称和类型生成代码(包括字符串和派生标识符)
- load - pickling.load 的奇怪行为
- unit-testing - PHPUnit:如何在 Helper 文件中测试单个函数
- api - 参数类型'列表
' 不能分配给参数类型 'Iterable ' - javascript - JavaScript 使用 enter 运行字段搜索
- qnap - 为什么我的 Qnap NAS TS-431 状态灯一直闪烁?