我知道有一个类似的问题。 对我来说,枚举如下:
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"
}
}
欲了解更多信息