为什么我不能在内部类的实例上访问外部类的属性?
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
Run Code Online (Sandbox Code Playgroud)
在这个例子中, b.id 编译失败。
我认为我必须在 B 上添加一个返回this@A.id
. 但为什么?
内部类只引用封闭实例,因此不会继承外部类的成员。
由于内部类具有对封闭类的引用,因此只能在类内访问此封闭实例(Java: Outer.this
、Kotlin: this@Outer
),但是您无法从内部类外部访问封闭实例是正确的。
使您自己的 getter 函数返回封闭实例是执行此操作的唯一方法。
尽管根据 Jon Skeet生成的对外部实例的引用是包私有的,但 Java 和 Kotlin 都没有任何获取此实例的方法。您可以使用反射,但由于生成的字段名称可能不可靠,您最好的选择是修改内部类。
归档时间: |
|
查看次数: |
2289 次 |
最近记录: |