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

时间:2018-07-15 14:47:01

标签: 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"
}

1 个答案:

答案 0 :(得分:0)

比较两个合格的类型名称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
    }
}

正如Pawel所述,嵌套类型和对象声明不是成员,并且具有与函数和属性不同的解析规则。

相关问题