在 Kotlin 中迭代枚举内部值



我知道有一个类似的问题。 对我来说,枚举如下:

enum class Gender (val s:String) {
Female("female"),
Male("male")
}

如何迭代性别枚举并获取"女性"或"男性"?

这是一个简单的例子。有几种方法可以迭代值,但它们与迭代任何数组相同。

fun main() {
for (gender in Gender.values()) {
println(gender.s)
}
}
enum class Gender(val s: String) {
Female("female"),
Male("male")
}

对于敏锐的眼睛,在性别类声明中创建的"s"变量也将成为迭代性别值时要访问的变量。这里令人困惑的一点是,您认为"女性"是键,"女性"是该键的值。但是,枚举将自身中的每个类型列为值。

特定于Android的,因为它在您的标签中提到: Proguard 无法优化这种情况(或者至少在 2018 年无法优化(,因此最好这样做:

enum class Gender {
Female,
Male
}
val Gender.s get() = when(this) {
Female -> "female"
Male -> "male"
}

然后使用@Slaw的注释或@Asgeir的答案,它们将像您的初始代码一样工作。

使用最新版本的枚举

@StringDef(Female, Male)
@Retention(AnnotationRetention.SOURCE)
annotation class Gender {
companion object {
const val Female = "female"
const val Male = "male"
}
}

欲了解更多信息

最新更新