Kotlin:无法访问伴生对象中定义的枚举

Ray*_*ang 6 kotlin

根据 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)

hot*_*key 5

比较两个限定类型名称Foo.Type.AFoo.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所指出的,嵌套类型和对象声明不是成员,并且具有与函数和属性不同的解析规则。