Экземпляр Kotlin KClass внутри функции расширения

Мне нужно получить доступ к типу класса внутри общей функции расширения. Например, если я хочу, чтобы функция расширения возвращала коллекции членов типа, которые я распространяю, я бы сделал:

fun <T> T.getMembers() = this::class.memberProperties 

Проблема в том, что я не могу сделать это: class и T :: class внутри функции. Есть ли способ доступа к типу класса общего типа?

В общем, вы бы не использовали :: чтобы получить класс из this , потому что this ссылается на экземпляр, а не на тип. Как правило, вы получите класс из this с this.javaClass.kotlin

T ссылается на тип, поэтому обычно вы ссылаетесь на KClass с T::class .

Однако в вашем конкретном фрагменте кода ни один из них не будет работать без каких-либо дополнительных изменений.

Поскольку общий тип T не ограничен Any , вы не можете получить доступ к полю javaClass. Чтобы добавить ограничение, используйте:

 fun <T : Any> T.getMembers() = this::class.memberProperties 

Поскольку универсальный тип не является reified, вы не можете использовать T::class . Чтобы восстановить T, используйте:

 inline fun <reified T : Any> T.getMembers() = T::class.memberProperties 

См. https://kotlinlang.org/docs/reference/inline-functions.html#reified-type-parameters

  • Функция расширения Kotlin
  • Что означает «. ()» В Котлине?
  • Настройка привязок Guice в Котлине
  • Объявление функции Kotlin: знак равенства перед фигурными скобками
  • Объяснить эту структуру функций Котлина
  • Kotlin - Как я могу получить доступ к моей новой функции расширения класса из другого файла
  • Могу ли я иметь другой тип возврата в котлин?
  • Kotlin: Общая функция как возвращаемый тип?
  • убедитесь, что метод kotlin является статическим, верхним или аннотированным @JvmStatic
  • Есть ли способ показать все функции расширения данного класса Kotlin в Intellij IDE?
  • Глобальная функция расширения в котлине
  • Interesting Posts
    Давайте будем гением компьютера.