Kotlin: equivalente à getClass () para a KClass

em Java podemos resolver a classe de uma variável através {[[0]} como something.getClass(). Em Kotlin eu estou ciente de something.javaClass que é bom, mas eu quero ser capaz de obter o KClass de uma forma semelhante. Já vi a sintaxe Something::class mas não é disto que preciso. Preciso da classe K de uma variável. Essa funcionalidade existe?

 45
Author: Jire, 2015-09-18

2 answers

A forma mais fácil de o conseguir, uma vez que o Kotlin 1.1 é a sintaxe de referência da classe :

something::class

Se usar o Kotlin 1. 0, poderá converter a classe Java obtida para uma instância KClass, invocando a propriedade .kotlin Extensão:

something.javaClass.kotlin
 70
Author: Alexander Udalov, 2017-06-19 12:48:36

EDIT:veja os comentários, abaixo, e Responda de Alexander, acima. Este conselho foi originalmente para o Kotlin 1.0 e parece agora obsoleto.

Uma vez que a linguagem não suporta uma maneira direta de obter isso ainda, considere definir um método de extensão para agora .

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

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

Ou, se preferir uma propriedade:

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

val test = 0
println("Kotlin type: ${test.kClass}")
 9
Author: dherman, 2018-07-10 22:35:14