Intereting Posts
Любое улучшение кода при добавлении / замене фрагмента Котлинский эквивалент «экспортного дефолта» в JavaScript Могу ли я использовать Coroutines Котлина, используя их в Java-коде? Переопределяющий val, определенный в интерфейсе, с использованием var с тем же именем, определенным в суперклассе Синхронизация даты в формате даты и времени – Kotlin Kotlin: разрешить общее наследование Как использовать обработанную Kotlin оболочку MailChimp в Java Project Требуется ли знание Groovy для понимания Gradle? как сделать множество подмножеств постоянными в котлине Почему неразрешенная ссылка на попытку доступа к постоянным значениям? Есть ли способ легко открыть и закрыть поток в котлин? Как проверить код, который вызывает функции верхнего уровня в Котлине? SparkJava с использованием Kotlin и WebSockets В чем разница между var map = HashMap <Int, String> () и var map = HashMap <Int, String> (n)? Android Dagger 2.11 с Kotlin, ContributesAndroidInjector Аннотация

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