Jul*_* A. 2 syntax enums kotlin
有没有办法在Kotlin的数据类中嵌套枚举?
data class D(val a:Any) {
enum class E {F,G}
...
}
Run Code Online (Sandbox Code Playgroud)
还是在函数中内联声明?
fun foo() {
enum class E {F,G}
doSomething()
}
Run Code Online (Sandbox Code Playgroud)
我找不到有关允许声明枚举的规则的文档。
是的,您可以将枚举嵌套在数据类中,但不能嵌套在函数中:
data class Outer(val a: InnerEnum) {
enum class InnerEnum { A, B }
}
fun foo() {
val o = Outer(Outer.InnerEnum.A)
println(o) // --> Outer(a=A)
}
Run Code Online (Sandbox Code Playgroud)
目前 kotlin 还没有该语法规范。如果你想找规范可以看JLS,因为 Kotlin 是基于 Java 的,所以有些规范在 Kotlin 中也适用。
\n\n\n嵌套枚举类型是隐式static 的。允许嵌套枚举类型的声明冗余地指定 static 修饰符。
\n这意味着不可能在内部类(\xc2\xa78.1.3)的主体中声明枚举类型,因为内部类不能拥有除常量变量之外的静态成员。
\n并且,所有本地类都是内部类。
\n
因此,类可以在函数作用域和类enum之外的任何地方声明。localinner
如果你不确定在哪里可以定义类型,你可以尝试依次提示范围: >> ,local然后kotlin 编译器会给你正确的编译器错误消息。例如:classtop
如果在本地函数中定义 a const val,编译器会报告如下错误:
fun local() {\n const val foo="bar"\n // ^--- the modifier `const` is not applicable to `local variable` \n}\nRun Code Online (Sandbox Code Playgroud)\n如果在公共类/接口中定义a const val,编译器将报告如下错误:
interface Foo {\n const val foo = "bar"\n //^--- `const val` only allowed on top-level or objects.\n}\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
3870 次 |
| 最近记录: |