【发布时间】:2020-10-24 10:13:47
【问题描述】:
当给定枚举的默认值时,我需要一个 Kotlin 函数从字符串中返回一个枚举值。
每个枚举类都有一个 valueOf() 方法,但我追求适用于任何给定枚举类的泛型。
对于我可以做的示例枚举:
enum class Example {
first,
second,
third ;
companion object { // Note same exact code also works if not in companion object
fun valueOrDefault(value: String, default: Example) = try {
valueOf(value)
} catch (e: IllegalStateException) {
default
}
}
}
挑战在于如何制作一个通用的。我有代码需要为任何给定的枚举类执行此操作。
问题是我看不到如何编写函数的通用版本。
到目前为止我有:
fun <T: Enum<Any>>valueOrDefault(value: String, default: T): T = try {
valueOf(value) as T
} catch (e: IllegalStateException) {
default
}
但是无论我使用什么组合都无法访问valueOf() 方法。我尝试为 T 创建函数和扩展函数,但这没有帮助。可能是 Enum<Any> 的语法不正确......但任何见解都值得赞赏。
【问题讨论】: