为什么不能在内部类的实例上访问外部类的属性?
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
的吸气剂。但是为什么呢?
答案 0 :(得分:2)
内部类仅具有对封闭实例的引用,因此不会继承外部类的成员。
由于内部类对封装类有引用,因此只能在该类内(Java:ajax-pagination
,Kotlin:Outer.this
访问此封装实例。您是正确的,您无法从内部类外部访问封闭的实例。
一个类可能被标记为
this@Outer
,以便能够访问外部类的成员。
Kotlin Reference / Nested and Inner Classes
让自己的getter函数返回封闭的实例是the only way。
尽管生成的对外部实例的引用是私有的according to Jon Skeet,但是Java和Kotlin都没有任何获取此实例的方法。您可以使用反射,但是由于生成的字段名称可能不可靠,因此最好的选择是修改内部类。