如何在 Kotlin 中访问内部对象的成员

Yar*_*lav 3 kotlin

我无法访问内部对象的成员。

class Foo {
    val obj = object {
        val field = 42
    }
}

fun foo() {
    Foo().obj.field // unresolved reference field
}
Run Code Online (Sandbox Code Playgroud)

esk*_*ski 5

问题在于obj被视为超出其自身范围的Any类型。这意味着只有 obj 可以引用它自己的属性,因为Any类不包含任何属性。

相反,如果您有一个具有属性的接口,并使您的对象扩展该接口并实现该属性,则您将能够在具有该属性可见性的任何地方引用它:

interface FieldHolder {
  val field: Int
}

class Foo {
  val obj = object: FieldHolder {
    override val field = 42
  }
}

fun foo() {
  Foo().obj.field // this should now work.
}
Run Code Online (Sandbox Code Playgroud)