【发布时间】:2017-06-01 06:50:01
【问题描述】:
我是这里的新手。谁能举个例子用 values 和 valueOf 方法迭代枚举?
这是我的枚举类
enum class Gender {
Female,
Male
}
我知道我们可以得到这样的值
Gender.Female
但我想迭代并显示 Gender 的所有值。我们怎样才能做到这一点?任何帮助将不胜感激
【问题讨论】:
标签: kotlin
我是这里的新手。谁能举个例子用 values 和 valueOf 方法迭代枚举?
这是我的枚举类
enum class Gender {
Female,
Male
}
我知道我们可以得到这样的值
Gender.Female
但我想迭代并显示 Gender 的所有值。我们怎样才能做到这一点?任何帮助将不胜感激
【问题讨论】:
标签: kotlin
你可以像这样使用values:
val genders = Gender.values()
从 Kotlin 1.1 开始,还提供了一些辅助方法:
val genders = enumValues<Gender>()
通过以上你可以轻松地遍历所有值:
enumValues<Gender>().forEach { println(it.name) }
要将枚举名称映射到枚举值,请使用 valueOf/enumValueOf,如下所示:
val male = Gender.valueOf("Male")
val female = enumValueOf<Gender>("Female")
【讨论】:
name的abc,或ordinal,...)?这种方法稳定吗(如果枚举顺序和项目不变,迭代顺序不会改变)?
Enum.values()。
您将得到[LGender;@2f0e140b 或与打印Gender.values() 类似的输出,因为您正在打印数组引用本身,并且数组没有像列表那样好的默认toString 实现。
打印所有值的最简单方法是遍历该数组,如下所示:
Gender.values().forEach { println(it) }
或者如果你喜欢方法参考:
Gender.values().forEach(::println)
您还可以使用标准库中的joinToString 来显示单个格式化字符串中的所有值(它甚至具有前缀、后缀、分隔符等选项):
println(Gender.values().joinToString()) // Female, Male
【讨论】:
您可以将此方法添加到您的枚举类中。
fun getList(): List<String> {
return values().map {
it.toString()
}
}
然后调用
val genders = Gender.getList()
// genders is now a List of string
// Female, Male
【讨论】:
您可以这样做并获得一个新的枚举类型数组Gender
val arr = enumValues<Gender>()
如果你想要它的列表,你可以使用扩展。 toList()
【讨论】: