Intereting Posts
Получите enum constant, используя его значение Видимость конструктора ограничена файлом андроидные запросы с несколькими областями с помощью RXJava Ошибка стекирования потока при использовании факториала рекурсией на ктолине Свойства конструктора Котлина и вызов различных конструкторов суперкласса Разбор 2D-массива в Котлине Почему результат функции не работает как предложение в заявлении when в Kotlin? Может ли целое число в Котлине быть равно математическому выражению? Использование библиотеки kotlin в Java-коде Лямбда-выражения в Котлине Счетчик приращений и декретов FireStore Transactions получает непоследовательный результат Выполнение команды Kotlin if, даже если false Модуль библиотеки Android, разработанный в Kotlin, экспортируется в приложение Java, вызывающее неудачное разрешение: Lkotlin / jvm / internal / Intrinsics Общие методы и наследование Котлина Проблема Android в выборе и отмене выбора элементов в адаптере kotlin?

Тип параметра проверки Kotlin

При работе с отражением Java я могу сделать что-то вроде этого: method.getParameterTypes()[i] который дает мне параметр i type ( Class ).

Как я могу добиться этого, используя KCallable Kotlin? Я попытался сделать что-то вроде этого: callable.parameters[i].type но единственное, что я нашел, это type.javaType но он возвращает Type который мне совсем не помог. Я также пробовал parameters[i].kind но это мне совсем не помогло.

Как я могу использовать method.getParameterTypes() с помощью KCallable Kotlin?

Solutions Collecting From Web of "Тип параметра проверки Kotlin"

Если вы используете Kotlin 1.1+,

1) У вас есть kotlin-reflect , тогда вы должны использовать callable.parameters[i].type.jvmErasure.java .

2) У вас нет kotlin-reflect , затем перейдите к 3)

Если вы используете более старую версию, я настоятельно рекомендую вам перевести код на 1.1. Если по какой-то причине вы должны придерживаться старой, перейдите к 3),

3) Сначала вы должны добавить этот фрагмент кода, который вычисляет исходный тип данного java.lang.reflect.Type :

 import java.lang.reflect.* val Type.rawtype: Class<*> get() = when (this) { is Class<*> -> this is ParameterizedType -> rawType as Class<*> is GenericArrayType -> genericComponentType.rawtype.asArrayType() is TypeVariable<*> -> this.bounds[0]?.rawtype ?: Any::class.java // <--- A bug of smart cast here, forcing the use of "this." is WildcardType -> lowerBounds[0].rawtype else -> throw AssertionError("Unexpected type of Type: " + javaClass) } fun Class<*>.asArrayType() = java.lang.reflect.Array.newInstance(this, 0).javaClass 

затем просто вызовите callable.parameters[i].type.javaType.rawtype .