kotlin - 在 Kotlin 中,为什么我不能在内部类的实例上访问外部类?
问题描述
为什么我不能在内部类的实例上访问外部类的属性?
class A(val id: String) {
inner class B {}
}
fun test() {
val a = A("test")
val b = a.B()
aid(a)
bid(b)
}
fun aid(a:A): String = a.id
fun bid(b:A.B): String = b.id //Unresolved reference: id
在此示例中,b.id 无法编译。
我收集到我必须在 B 上添加一个返回的吸气剂this@A.id
。但为什么?
解决方案
内部类仅具有对封闭实例的引用,因此不继承外部类的成员。
由于内部类具有对封闭类的引用,因此只能在类内访问该封闭实例(Java: Outer.this
, Kotlin: this@Outer
),但是您不能从内部类外部访问封闭实例是正确的。
制作自己的 getter 函数来返回封闭的实例是唯一的方法。
尽管根据 Jon Skeet生成的对外部实例的引用是包私有的,但 Java 和 Kotlin 都没有任何获取该实例的方法。可以使用反射,但是由于生成的字段名可能不可靠,最好的选择是修改内部类。
推荐阅读
- html - Outlook HTML - 没有自动空间的签名编辑
- python - 如何在 TensorFlow 中将信号与一维内核卷积?
- java - 使用 Comparable 接口对通用链表进行排序
- kubernetes - Kibana 未正确加载。检查服务器输出以获取更多信息
- swift - 如何在 Qt 应用程序中集成 Swift 代码
- angular - Angular 7 TypeError:无法读取专业版
- javascript - 将对象转换为文件并通过 Ajax 发送
- php - 如何使用 IV & TAG 在 PHP 中解密 aes-256-gcm
- rust - 无法读取通过 hyper::client::Client 发出 HTTP 请求的简单有效负载:不满足 trait bound `Body: Future`
- sql - 我们可以在 SQL 中做 PIVOT 表时添加两列吗