fun KClass<out Enum<*>>.enumConstantNames() =
this.java.enumConstants.map(Enum<*>::name)
// if you really want an Array<String> for some reason, you can add
// .toTypedArray()
// but I don't see any reason to
用法:
fun main(args: Array<String>) {
println(Foo::class.enumConstantNames()) // [A, B, C]
}
enum class Foo {
A, B, C
}
val numbers = java.util.Hashtable<String, Int>()
numbers.put("one", 1)
numbers.put("two", 2)
numbers.put("three", 3)
// when you have an Enumeration from some old code
val enumeration: java.util.Enumeration<Int> = numbers.elements()
// you can convert it to list and transform further with list operations
val list = enumeration.toList().sorted()
println(list) // [1, 2, 3]
3条答案
按热度按时间sbdsn5lh1#
直译应该是:
这给了你一个机会
Array<String?>
.然而,我认为一个更为kotlin-y的方法是返回一个
List<String>
,因为这是内置的Array.map
扩展函数返回。您还应该将其作为扩展函数/属性写入KClass<out Enum<*>>
,而不是javaClass
.用法:
ma8fv8wu2#
你可以用
enumValues<T>()
如使用枚举常量和中所示map
名字。3duebb1j3#
有关详细信息,请查阅kotlin的官方文件。
https://kotlinlang.org/docs/enum-classes.html
kotlin enum可按以下方式编写:
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.collections/java.util.-enumeration/to-list.html
这是一个使用现有java枚举到kotlin列表的示例。
这个答案也可能有帮助。https://stackoverflow.com/a/44300496/4491971