【发布时间】:2019-09-20 05:59:13
【问题描述】:
我知道有一个 similar question 。 对我来说,枚举如下:
enum class Gender (val s:String) {
Female("female"),
Male("male")
}
如何迭代 Gender 枚举并获得“女性”或“男性”?
【问题讨论】:
-
val list = Gender.values().map { it.s }
我知道有一个 similar question 。 对我来说,枚举如下:
enum class Gender (val s:String) {
Female("female"),
Male("male")
}
如何迭代 Gender 枚举并获得“女性”或“男性”?
【问题讨论】:
val list = Gender.values().map { it.s }
这是一个简单的例子。有几种方法可以迭代值,但它们与迭代任何 Array 相同。
fun main() {
for (gender in Gender.values()) {
println(gender.s)
}
}
enum class Gender(val s: String) {
Female("female"),
Male("male")
}
对于敏锐的眼睛,在 Gender 类声明中创建的 's' 变量也将成为迭代 Gender 值时要访问的变量。这里令人困惑的一点是,您将“女性”视为键,而将“女性”视为该键的值。然而,枚举将自身中的每种类型都列为值。
【讨论】:
Android 特定,因为它在您的标签中提到:Proguard 无法优化这种情况(或至少 it couldn't in 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"
}
}