В Java мы можем разрешить класс переменной через getClass()
like something.getClass()
. В Kotlin я знаю, something.javaClass
что приятно, но я хочу получить возможность KClass
аналогичным образом. Я видел Something::class
синтаксис, но это не то, что мне нужно. Мне нужно получить KClass переменной. Такой функционал существует?
93
javap
)KClass::class
для получения текущего объекта класса.something::class
возвращаетсяKClass<out Something>
приsomething.javaClass.kotlin
возвратеKClass<Something>
РЕДАКТИРОВАТЬ: см. Комментарии ниже и ответ Александра выше. Этот совет изначально был для Kotlin 1.0, и теперь кажется, что он устарел.
Поскольку язык еще не поддерживает прямой способ получить это, подумайте об определении метода расширения на данный момент .
fun<T: Any> T.getClass(): KClass<T> { return javaClass.kotlin } val test = 0 println("Kotlin type: ${test.getClass()}")
Или, если вы предпочитаете недвижимость:
val<T: Any> T.kClass: KClass<T> get() = javaClass.kotlin val test = 0 println("Kotlin type: ${test.kClass}")
источник
java
бит и пойти прямо, Котлин:fun<T: Any> T.getClass(): KClass<out T> = this::class
someClass::class
Вот мое решение
val TAG = javaClass.simpleName
С помощью javaClass.simpleName вы можете получить имя своего класса. Кроме того, приведенный выше пример очень полезен разработчикам Android для объявления поверх класса в качестве переменной экземпляра для целей ведения журнала.
источник
Вот различные реализации для получения имен классов. Вы можете использовать его в соответствии с вашими требованиями.
import kotlin.reflect.KClass val <T : Any > T.kClassName: KClass<out T> get() { return javaClass.kotlin }
Здесь мы можем получить имя класса в котлине
val <T : Any > T.classNameKotlin: String? get() { return javaClass.kotlin.simpleName }
Здесь мы можем получить имя класса в котлине
val <T : Any > T.classNameJava: String get() { return javaClass.simpleName }
Вот результаты следующих операций.
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 }
источник