2016-02-27 63 views
5

有没有办法在没有反射的情况下在Kotlin中制作像这样的作品?Enum.valueOf在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") 
} 
+0

如果明确指定类型的参数值,你的函数的工作原理:'VAL value = safeValueOf (“test”)' – yole

+0

为什么不使用['valueOf']的Kotlin实现(https://kotlinlang.org/docs/reference/enum-classes.html#working-with-enum-constants) ? – soon

+0

@yole谢谢,就是这样。你介意发布这个答案吗? – AndroidEx

回答

6

如果您明确指定类型参数值,那么您的函数可以工作:

val value = safeValueOf<TestEnum>("test") 

原始代码应该工作一样好,但因为在类型推断实现中的错误的不工作:https://youtrack.jetbrains.com/issue/KT-11218