2016-02-27 54 views
5

Bu çalışmadan Kotlin'de yansıması olmayan bir şey yapmanın bir yolu var mı?Enum.valueOf in Kotlin

inline fun <reified T : kotlin.Enum<T>> safeValueOf(type: String?): T? { 
    return java.lang.Enum.valueOf(T::class.java, type) 
} 

nedeniyle aşağıdaki örnek derleme değildir: inline fun <reified T : kotlin.Enum<T>> safeValueOf(type: kotlin.String?): T? T'nin gitmekte

Tip parametresi tatmin değildir: tip TestEnum? anlaşılmaktadır bir alt tipi değildir kotlin.Enum<TestEnum?>

enum class TestEnum 

fun main() { 
    val value: TestEnum? = safeValueOf("test") 
} 
+0

: 'val value = safeValueOf ("test") ' – yole

+0

Neden [' valueOf'] 'un Kotlin uygulamasını kullanmıyoruz? (https://kotlinlang.org/docs/reference/enum-classes.html#working-with-enum-constants) ? – soon

+0

@yole Teşekkürler, işte bu kadar. Bunu cevap olarak gönderiyor musunuz? – AndroidEx

cevap

6

Parametre değerini açıkça belirtirseniz, işleviniz çalışır:

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

orijinal kod yanı çalışmak gerekiyordu, fakat tür kesmesi uygulanmasında bir hata çalışmaz: https://youtrack.jetbrains.com/issue/KT-11218 açıkça tür parametre değerini belirtirseniz İşleviniz çalışır