Articles of отражение

Идиоматический способ вызова методов через отражение в Котлине

У меня есть код Kotlin, который пытается отразить метод, используя пакет Reflection Java: val arguments = arrayOfNulls<Any>(numberOfParams) // Populate arguments try { fooMethod.invoke(fooClass, arguments) } catch (e: Exception) { // Panic } Он продолжает терпеть неудачу с IllegalArgumentException «неправильного числа параметров». Я прочитал некоторые сведения об этой проблеме, и, похоже, оператор распространения метода invoke() отказывается […]

Котлин связал вызываемые ссылки несоответствия

Сегодня я создавал модульные тесты для своего презентатора в приложении для Android, и я заметил некоторую несогласованность со связанными вызываемыми ссылками. Является ли это разработкой или это языковая ошибка? Я обнаружил, что в kotlin поддерживаются связанные ссылочные ссылки 1.1. Но мой код не работает с kotlin 1.1.2-4. В моем классе презентатора проверенный метод считывает данные […]

Получение текущего класса

как я могу получить текущий класс в Котлине. Например, если есть абстрактный класс «Животное» и дочерний класс «Собака» (ведьма – ребенок «Животного»), как я могу получить класс «Собака» в «Животном». Я не сейчас, ведь классы ведьмы будут использовать «Животное», Я уже пытался использовать: this::class (что может быть на Java): this.getClass() Но этот метод не соответствует […]

Как получить KType в Котлине?

Я экспериментирую с функциональностью отражения в Kotlin, но я не могу понять, как получить значение KType. Предположим, у меня есть класс, который отображает фразы на объекты-объекты. В случае двусмысленности пользователь может предоставить параметр type который сужает поиск только на фабриках, которые возвращают этот тип объекта (или некоторый подтип). fun mapToFactory(phrase: Phrase, type: KType = Any::class): […]

Kotlin Reflection – проверка наличия свойства

Я хочу перебрать все поля в одном из моих классов, фильтровать аннотированные, а затем проверить, имеет ли поле один конкретный тип. Все, что я нашел, это field.returnType.isSubtype(other: KType) но я не знаю, как получить KType моего другого класса. Вот мой код: target.declaredMemberProperties.forEach { if (it.findAnnotation<FromOwner>() != null) { if ( /* it.returnType is Component <- […]

Как получить объявленные функции класса Kotlin (KClass в M12)?

В основном это. Мне интересно, как получить функции / методы с помощью KClass … похоже, что я могу только перебирать свойства и свойства расширения.

Kotlin: Сравнить значения свойств различных целевых объектов с (out) отражением

Я хочу сравнить значения между несколькими экземплярами класса данных, чтобы я знал, какое значение изменилось: data class A(val name : String) val firstA = A("hello") val secondA = A("you") if (secondA.name.changed(firstA)) { // Do something } Могу ли я каким-либо образом получить доступ к функции свойств .name и выполнить ее на другом целевом значении (в […]

Kotlin superClass Kclass

У меня есть определение функции abstract class AbstractDao<T>(private val dataStore: KotlinEntityDataStore<Persistable>): Dao<T> where T: Persistable и мне нужно получить KClass от типа T Это возможно в Котлине?

String.intern () возвращает разные значения в драйвере JDBC

Пока я пытался создать поддельный драйвер JDBC для тестирования безопасного загрузчика классов, я нашел странное поведение со следующим кодом: val stringClass = java.lang.String::class.java val intern = stringClass.getMethod("intern") val pooledString = intern.invoke("Hello World") as String val valueField = stringClass.getDeclaredField("value") valueField.isAccessible = true val pooledValue = valueField.get(pooledString) as ByteArray println( """|—————————————- | String: ${System.identityHashCode(stringClass)} | Thread: ${Thread.currentThread()} […]

Дженерики на KProperty1.getDelegate слишком ограничительные?

Я пытаюсь получить все свойства делегатов определенного типа в иерархии классов. Это представляет мне некоторые проблемы. Для начала, похоже, нет простого способа получить суперкласс класса в Котлине. Первый способ, которым я пытался использовать Java Class.getSuperclass : private fun <T : Any> KClass<T>.getSuperclass(): KClass<in T>? = (java.superclass as? Class<out Any>)?.kotlin as KClass<in T> Но для этого […]