enumContains
您可以创建一个enumContains
类似的功能猎犬的答案,但使用具体化的类型参数来代替.
您无法在Kotlin 1.0中创建独立于JVM的解决方案,但您可以在Kotlin 1.1中使用enumValues
.
/** * Returns `true` if enum T contains an entry with the specified name. */ inline fun> enumContains(name: String): Boolean { return enumValues ().any { it.name == name} }
/** * Returns `true` if enum T contains an entry with the specified name. */ inline fun> enumContains(name: String): Boolean { return T::class.java.enumConstants.any { it.name == name} }
enumContains("some string") // returns true or false
enumValueOfOrNull
如果您还需要实际的枚举条目,那么您可以考虑创建一个enumValueOfOrNull
函数.
/** * Returns an enum entry with the specified name or `null` if no such entry was found. */ inline fun> enumValueOfOrNull(name: String): T? { return enumValues ().find { it.name == name } }
/** * Returns an enum entry with the specified name or `null` if no such entry was found. */ inline fun> enumValueOfOrNull(name: String): T? { return T::class.java.enumConstants.find { it.name == name } }
enumValueOfOrNull("some string")
您可以只values
使用您的枚举数组,并在其中使用包含。例如:
Planets.values().map { it.name }.contains("EARTH")
但是为此,您需要具有正确的字符串值,以便在搜索之前将其大写。
如果要按其值查找枚举,请查看反向查找枚举。
编辑:
正如@JamesBassett所建议的那样,您可以对其进行优化以使其在找到匹配项后停止查找。
Planets.values().any { it.name == "EARTH" }