我想定义一组常量字符串作为一种方便的枚举,以便在编译时高枕无忧.简单的枚举可以用作字符串实例,这一点很明显(至少对我的Python背景是这样).

// Fine for overall use
enum class Things{ FIRST, SECOND, THIRD }
containsThings[Things.FIRST]

// If a String is expected, this works but has extra stuff
enum class Things(val v: String){
    FIRST("FIRST"), SECOND("SECOND"), THIRD("THIRD")
}
// I want to get rid of ".v"
containsThings[Things.FIRST.v]

// Naïve desired syntax
enum class Things: String { FIRST, SECOND, THIRD }
containsThings[Things.FIRST]

我是不是漏掉了什么明显的东西?

推荐答案

要实现这一点,您的枚举类必须是String的子类.这是不可能的,首先是因为您不能为枚举类指定超类,其次是因为String不是open并且不能被子类化.

Kotlin相关问答推荐

映射中列表类型的Kotlin可空接收器?

如何使用Kotlinx.LocalDateTime获取重置时间为00:00的当前日期?

哪个更好? Integer.valueOf(readLine()) 或 readLine()!!.toInt()

有没有什么方法或算法可以在没有存储的情况下生成唯一的随机数?

第二个协程永远不会执行

为什么 Kotlin 在 sumOf 函数 lambda 中默认不将数字视为Int?

从 Kotlin 调用 Java 时可以为空的规则是什么

为什么没有remember 的 mutableStateOf 有时会起作用?

如何使用 Kotlin KClass 属性 simpleName 生成空值

什么是 .kotlin_builtins 文件,我可以从我的 uberjars 中省略它们吗?

kotlin,如何从函数返回类类型

Kotlin 中的数据类

TextField maxLength - Android Jetpack Compose

如何在 Kotlin 中判断数组类型(不是泛型类型)

RecyclerView SnapHelper无法显示第一个/最后一个元素

Kotlin 扩展函数 - 覆盖现有方法

Kotlin lambda 语法混淆

指定为非null的参数在ArrayAdaper中为null

如果kotlin已经有了getter和setter,为什么在数据类中有componentN函数?

在多平台子元素中使用kapt