根据 Kotlin 文档:
只需使用类名作为限定符即可调用伴生对象的成员。
为什么它在这里似乎不起作用?
class Foo {
companion object {
enum class Type { A, B, C }
}
}
class Bar {
val typeA = Foo.Companion.Type.A // works
val typeB = Foo.Type.B // error: "Unresolved reference: Type"
}
Run Code Online (Sandbox Code Playgroud)
比较两个限定类型名称Foo.Type.A和Foo.Companion.Type.A,前者更倾向于表示直接在 的作用域内声明的类型Foo。
因此,后一种形式用于消除类型内部声明的类型与其嵌套类型和对象声明(包括 )内部声明的类型的歧义companion object。
class Foo {
class Bar // Foo.Bar
companion object {
class Bar // Foo.Companion.Bar
}
object Baz {
class Bar // Foo.Baz.Bar
}
}
Run Code Online (Sandbox Code Playgroud)
正如Pawel所指出的,嵌套类型和对象声明不是成员,并且具有与函数和属性不同的解析规则。