Em Java, podemos resolver a classe de uma variável por meio de getClass()
like something.getClass()
. Em Kotlin, estou ciente de something.javaClass
qual é bom, mas quero ser capaz de obter o KClass
de uma maneira semelhante. Eu vi a Something::class
sintaxe, mas não é disso que preciso. Eu preciso obter a KClass de uma variável. Essa funcionalidade existe?
96
javap
)KClass::class
para obter o objeto de classe atual.something::class
retornaKClass<out Something>
enquantosomething.javaClass.kotlin
retornaKClass<Something>
EDIT: Ver comentários, abaixo, e resposta de Alexandre, acima. Este conselho foi originalmente para o Kotlin 1.0 e parece que agora está obsoleto.
Como a linguagem ainda não oferece suporte a uma maneira direta de obter isso, considere definir um método de extensão por enquanto .
fun<T: Any> T.getClass(): KClass<T> { return javaClass.kotlin } val test = 0 println("Kotlin type: ${test.getClass()}")
Ou, se preferir um imóvel:
val<T: Any> T.kClass: KClass<T> get() = javaClass.kotlin val test = 0 println("Kotlin type: ${test.kClass}")
fonte
java
e ir direto, Kotlin:fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
Aqui está minha solução
val TAG = javaClass.simpleName
Com javaClass.simpleName você pode obter o nome da sua classe. Além disso, o exemplo acima é muito útil para desenvolvedores Android declararem no topo da classe como uma variável de instância para fins de registro.
fonte
Aqui estão diferentes implementações para obter nomes de classes. Você pode utilizá-lo de acordo com suas necessidades.
import kotlin.reflect.KClass val <T : Any > T.kClassName: KClass<out T> get() { return javaClass.kotlin }
Aqui podemos obter o nome da classe em kotlin
val <T : Any > T.classNameKotlin: String? get() { return javaClass.kotlin.simpleName }
Aqui podemos obter o nome da classe em kotlin
val <T : Any > T.classNameJava: String get() { return javaClass.simpleName }
Aqui estão as saídas para as seguintes operações.
fun main(){ val userAge = 0 println(userAge.kClassName) Output: class java.lang.Integer (Kotlin reflection is not available) println(userAge.classNameKotlin) Output: Int println(userAge.classNameJava) Output: Integer }
fonte