Kotlin 在科特林,为什么可以';我不能在内部类的实例上访问外部类吗?
为什么我不能在内部类的实例上访问外部类的属性Kotlin 在科特林,为什么可以';我不能在内部类的实例上访问外部类吗?,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无法编
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上添加一个getter,返回
this@A.id
。但是为什么呢?内部类只有一个对封闭实例的引用,因此不会继承外部类的成员
由于内部类引用了封闭类,因此只能在类内访问此封闭实例(Java:Outer.this
,Kotlin:this@Outer
),但您不能从内部类外部访问封闭实例,这是正确的
类可以标记为内部
,以便能够访问外部类的成员。/ 让您自己的getter函数返回封闭实例就是这样做的 尽管生成的对外部实例的引用是包私有的,但Java和Kotlin都没有获得该实例的任何方法。可以使用反射,但由于生成的字段名可能不可靠,因此最好的选择是修改内部类