Intereting Posts
Вызов класса 'конструктор путем отражения с Котлином Элементы представления Android NavigationView Headerlayout не запускают события щелчка Доступ к представлениям из Activity с Anko Как вводить слушателей? Весенняя загрузка с Jetty + Jersey всегда показывает 404 Локальные функции доступа к родительским переменным с тем же именем Управление жизненным циклом файлов cookie в сервлете Ktor 0.9.0 Использование типа Java Void в Котлине NullPointerException для android.support.v4.app.NotificationCompatBase $ Action.getIcon () Модуль библиотеки Android Kotlin экспортируется с плагином gradene maven-publish, не добавляющим зависимости Как код Kotlin запускается в приложении для Android и как он отличается от Java? Нуль-безопасный ответ сети с использованием Gson и Kotlin Интервал Рабочего Планировщика называется слишком нерегулярным Является ли Kotlin / Native полезным для себя? Android Spinner getDropDownView повторяет элементы после выбора

Тип параметра проверки 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 .