enumContains
您可以创建一个类似于Hound Dog 的answer 的enumContains 函数,但改用reified type parameters。
您无法在 Kotlin 1.0 中创建独立于 JVM 的解决方案,但您可以在 Kotlin 1.1 中使用 enumValues。
科特林 1.1
/**
* Returns `true` if enum T contains an entry with the specified name.
*/
inline fun <reified T : Enum<T>> enumContains(name: String): Boolean {
return enumValues<T>().any { it.name == name}
}
科特林 1.0
/**
* Returns `true` if enum T contains an entry with the specified name.
*/
inline fun <reified T : Enum<T>> enumContains(name: String): Boolean {
return T::class.java.enumConstants.any { it.name == name}
}
用法
enumContains<MyEnum>("some string") // returns true or false
enumValueOfOrNull
如果您还需要实际的枚举条目,那么您可以考虑创建一个 enumValueOfOrNull 函数。
科特林 1.1
/**
* Returns an enum entry with the specified name or `null` if no such entry was found.
*/
inline fun <reified T : Enum<T>> enumValueOfOrNull(name: String): T? {
return enumValues<T>().find { it.name == name }
}
科特林 1.0
/**
* Returns an enum entry with the specified name or `null` if no such entry was found.
*/
inline fun <reified T : Enum<T>> enumValueOfOrNull(name: String): T? {
return T::class.java.enumConstants.find { it.name == name }
}
用法
enumValueOfOrNull<MyEnum>("some string")