Kotlin - Получить класс <T>от KProperty1 - PullRequest
1 голос
/ 26 сентября 2019

Учитывая следующий класс:

data class Foo(val bar: Int)

Как мне получить Class<T> для Foo ...

val prop = Foo::bar

... из этого выражения свойства?

1 Ответ

3 голосов
/ 26 сентября 2019
val receiver = prop.parameters[0]
val receiverClass = receiver.type.jvmErasure.java

Обратите внимание, что вы получаете KType и KClass в пути, который вы можете предпочесть Class.

. Выше работает, потому что parameters документация говорит

Если для этого вызываемого объекта требуется данный экземпляр или параметр получателя расширения, они идут первыми в списке в таком порядке.

, поэтому, возможно, стоит оставить комментарий вВаш код.

Параметр получателя также можно получить более явно с помощью

val receiver = (prop.instanceParameter ?: prop.extensionReceiverParameter)!!
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...