使用kotlin中的values()和valueOf迭代枚举值

17 kotlin

我是新手.任何人都可以举例说明使用值和valueOf方法迭代枚举吗?

这是我的enum课程

enum class Gender {
    Female,
    Male
}
Run Code Online (Sandbox Code Playgroud)

我知道我们可以得到这样的价值

Gender.Female
Run Code Online (Sandbox Code Playgroud)

但我想迭代并显示Gender的所有值.我们怎样才能做到这一点?Anyhelp可能会受到赞赏

mie*_*sol 30

您可以这样使用values:

val genders = Gender.values()
Run Code Online (Sandbox Code Playgroud)

从Kotlin 1.1开始,还有一些辅助方法:

val genders = enumValues<Gender>()
Run Code Online (Sandbox Code Playgroud)

通过上述内容,您可以轻松迭代所有值:

enumValues<Gender>().forEach { println(it.name) }
Run Code Online (Sandbox Code Playgroud)

要将枚举名称映射到枚举值,请使用valueOf/ enumValueOflike,如下所示:

 val male = Gender.valueOf("Male")
 val female = enumValueOf<Gender>("Female")     
Run Code Online (Sandbox Code Playgroud)


Var*_*Raj 14

您可以将此方法添加到您的枚举类中。

fun getList(): List<String> {
    return values().map {
        it.toString()
    }
}
Run Code Online (Sandbox Code Playgroud)

并打电话

val genders = Gender.getList()
// genders is now a List of string
// Female, Male
Run Code Online (Sandbox Code Playgroud)

  • 只有将该方法添加到枚举类的伴生对象中,我才能使其正常工作。如果将该方法直接添加到枚举类中,则只能使用 Gender.Female.getList() 来访问它。 (2认同)

zsm*_*b13 10

您正在[LGender;@2f0e140b打印或类似于打印输出,Gender.values()因为您正在打印数组引用本身,并且数组没有toString像列表那样的很好的默认实现。

打印所有值的最简单方法是遍历该数组,如下所示:

Gender.values().forEach { println(it) }
Run Code Online (Sandbox Code Playgroud)

或者,如果您喜欢方法引用:

Gender.values().forEach(::println)
Run Code Online (Sandbox Code Playgroud)

您还可以使用joinToString标准库中的单个格式化字符串显示所有值(它甚至有前缀、后缀、分隔符等选项):

println(Gender.values().joinToString()) // Female, Male
Run Code Online (Sandbox Code Playgroud)