代码之家  ›  专栏  ›  技术社区  ›  Julian A.

有没有办法在Kotlin的数据类中嵌套枚举?

  •  6
  • Julian A.  · 技术社区  · 7 年前

    有没有办法在Kotlin的数据类中嵌套枚举?

    data class D(val a:Any) {
        enum class E {F,G}
        ...
    }
    

    fun foo() {
        enum class E {F,G}
        doSomething()
    }
    

    我找不到关于允许声明枚举的规则的文档。

    2 回复  |  直到 7 年前
        1
  •  13
  •   guenhter    5 年前

    是的,可以将枚举嵌套在数据类中,但不能嵌套在函数中:

    data class Outer(val a: InnerEnum) {
        enum class InnerEnum { A, B }
    }
    
    fun foo() {
        val o = Outer(Outer.InnerEnum.A)
        println(o) // --> Outer(a=A)
    }
    
        2
  •  5
  •   Community Lee Campbell    4 年前

    目前没有kotlin语法规范。如果您想找到规格,可以查看 JLS

    嵌套枚举类型是隐式的 静止的 。允许嵌套枚举类型的声明冗余指定静态修饰符。

    内部的 类(§8.1.3),因为内部类不能具有 成员,除 常量变量

    还有,所有 local class es是 内部的 课程。

    这个 enum local 功能范围和 inner

    如果您不确定在哪里可以定义类型,可以尝试依次提示作用域: 地方的 &燃气轮机; class &燃气轮机; top

    如果 const val 在局部函数中,编译器报告错误如下:

    fun local() {
        const val foo="bar"
        // ^--- the modifier `const` is not applicable to `local variable`  
    }
    

    如果 您定义了 在公共类/接口中,编译器将报告以下错误:

    interface Foo {
      const val foo = "bar"
      //^--- `const val` only allowed on top-level or objects.
    }