根据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"
}
答案 0 :(得分:0)
比较两个合格的类型名称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
}
}
正如Pawel所述,嵌套类型和对象声明不是成员,并且具有与函数和属性不同的解析规则。