2015-09-18 16 views
34

W Javie możemy rozwiązać klasę zmiennej przez getClass(), taką jak something.getClass(). W Kotlin jestem świadomy, że something.javaClass jest fajny, ale chcę móc uzyskać KClass w podobny sposób. Widziałem składnię Something::class, ale to nie jest to, czego potrzebuję. Potrzebuję uzyskać KClass zmiennej. Czy taka funkcjonalność istnieje?Kotlin: Równoważnik getClass() dla KClass

Odpowiedz

53

Najprostszym sposobem osiągnięcia tego celu, ponieważ Kotlin 1.1 jest class reference syntax:

something::class 

Jeśli używasz Kotlin 1.0, można konwertować uzyskanej klasy Java do instancji KClass wywołując właściwość .kotlin rozszerzenia:

something.javaClass.kotlin 
+0

dowolnym miejscu mogę śledzić realizację czegoś :: klasie? – Nishad

+1

@Nishad Najprostszym miejscem byłoby spojrzenie na wygenerowany kod bajtowy (np. Z 'javap') –

8

Ponieważ język nie obsługuje jeszcze bezpośredniego sposobu uzyskania tego, consider defining an extension method for now.

fun<T: Any> T.getClass(): KClass<T> { 
    return javaClass.kotlin 
} 

val test = 0 
println("Kotlin type: ${test.getClass()}") 

Lub, jeśli wolisz właściwość:

val<T: Any> T.kClass: KClass<T> 
    get() = javaClass.kotlin 

val test = 0 
println("Kotlin type: ${test.kClass}")