有没有办法在Kotlin的数据类中嵌套一个枚举?
有没有办法在Kotlin的数据类中嵌套一个枚举?
data class D(val a:Any) { enum class E {F,G} ... }
或者在函数中声明它内联?
fun foo() { enum class E {F,G} doSomething() }
我无法找到允许声明枚举的规则的文档。
目前没有关于语法的kotlin规范。 如果你想找到规范,你可以看到JLS ,因为Kotlin是基于Java的,所以有些规范也适用于Kotlin。
嵌套的枚举类型是隐式静态的 。 允许声明嵌套的枚举类型来冗余地指定静态修饰符。
这意味着在内部类(§8.1.3)的主体中声明一个枚举类型是不可能的,因为除了常量变量外,内部类不能有静态成员。
而且,所有的地方课都是内部的课。
所以 enum
类可以在除了local
函数作用域和inner
类之外的任何地方声明。
如果你不确定哪里可以定义一个类型,你可以尝试依次提示scope: local
> class
> top
,那么kotlin编译器会给你正确的编译器错误信息给你。 例如:
如果你在本地函数中定义了一个const val
,编译器会报错,如下所示:
fun local() { const val foo="bar" // ^--- the modifier `const` is not applicable to `local variable` }
如果你在普通的类/接口中定义了一个const val
,编译器会报错,如下所示:
interface Foo { const val foo = "bar" //^--- `const val` only allowed on top-level or objects. }
是的,你可以嵌套枚举一个数据类,但不是在一个函数:
data class Outer(val a: InnerEnum) { enum class InnerEnum { A, B } } fun foo() { val o = Outer(Outer.InnerEnum.A) println(o) // --> Outer(a=A) }