В Java мы можем разрешить класс переменной через getClass()
как something.getClass()
. В Kotlin я знаю something.javaClass
, что приятно, но я хочу иметь возможность получить KClass
аналогичным образом. Я видел синтаксис Something::class
, но это не то, что мне нужно. Мне нужно получить KClass переменной. Существует ли такая функциональность?
Kotlin: Эквивалент getClass() для KClass
Ответ 1
Самый простой способ добиться этого, поскольку Kotlin 1.1 - это синтаксис ссылок класса:
something::class
Если вы используете Kotlin 1.0, вы можете преобразовать полученный Java-класс в экземпляр KClass, вызвав свойство .kotlin
extension:
something.javaClass.kotlin
Ответ 2
РЕДАКТИРОВАТЬ: см. Комментарии ниже, и ответ от Александра, выше. Этот совет изначально был для 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}")