Подтвердить что ты не робот

Kotlin: Эквивалент getClass() для KClass

В Java мы можем разрешить класс переменной через getClass() как something.getClass(). В Kotlin я знаю something.javaClass, что приятно, но я хочу иметь возможность получить KClass аналогичным образом. Я видел синтаксис Something::class, но это не то, что мне нужно. Мне нужно получить KClass переменной. Существует ли такая функциональность?

4b9b3361

Ответ 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}")