代码之家  ›  专栏  ›  技术社区  ›  Ray Zhang

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

  •  1
  • Ray Zhang  · 技术社区  · 8 年前

    根据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 回复  |  直到 8 年前
        1
  •  0
  •   hotkey    8 年前

    比较两个限定类型名, 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
        }
    }
    

    AS Pawel 注意,嵌套类型和对象声明不是成员,并且与函数和属性的解析规则不同。