【发布时间】:2016-02-27 07:01:08
【问题描述】:
有没有办法在没有反射的情况下在 Kotlin 中进行类似的工作?
inline fun <reified T : kotlin.Enum<T>> safeValueOf(type: String?): T? {
return java.lang.Enum.valueOf(T::class.java, type)
}
以下示例无法编译,原因是:
在
inline fun <reified T : kotlin.Enum<T>> safeValueOf(type: kotlin.String?): T?中为 T 绑定的类型参数 不满意:推断类型TestEnum?不是kotlin.Enum<TestEnum?>的子类型
enum class TestEnum
fun main() {
val value: TestEnum? = safeValueOf("test")
}
【问题讨论】:
-
如果您明确指定类型参数值,您的函数将起作用:
val value = safeValueOf<TestEnum>("test") -
为什么不直接使用
valueOf的 Kotlin 实现? -
@soon 我想扩展
valueOf的功能并将其与不同的枚举类型一起使用 -
请问这是safeValueOf吗?这仍然会引发异常
-
@charlie_pl 问题标题并没有真正说明安全性。当时的问题是使这个构造工作,并且,正如您正确指出的那样,
safeValueOf在这里并不安全,因为它只是手头问题的一个最小示例。但是您可以很容易地想象如何从这里使它变得安全。