Articles of kotlin reflect

Объединение / объединение классов данных в Котлин

Есть ли способ объединить классы данных kotlin без указания всех свойств? data class MyDataClass(val prop1: String, val prop2: Int, …//many props) с функцией со следующей сигнатурой: fun merge(left: MyDataClass, right: MyDataClass): MyDataClass где эта функция проверяет каждое свойство на обоих классах и где они разные, использует левый параметр для создания нового MyDataClass. Возможно ли это […]

Класс данных KotlinReflectionInternalError

При попытке использовать класс данных в качестве результата в службе Retrofit я получил следующую ошибку. 11-15 11:35:38.345 14693-14693/com.example.app E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.app, PID: 14693 kotlin.reflect.jvm.internal.KotlinReflectionInternalError: Incorrect resolution sequence for Java constructor public constructor AuthenticationResponse() defined in com.example.app.data.auth.AuthenticationResponse[JavaClassConstructorDescriptor@6d57dc3] (kotlin.reflect.jvm.internal.impl.load.java.structure.reflect.ReflectJavaClass: class com.example.app.data.auth.AuthenticationResponse) at kotlin.reflect.jvm.internal.RuntimeTypeMapper.mapSignature(RuntimeTypeMapper.kt:202) at kotlin.reflect.jvm.internal.KFunctionImpl.<init>(KFunctionImpl.kt:46) at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:87) at kotlin.reflect.jvm.internal.KClassImpl$Data$constructors$2.invoke(KClassImpl.kt:39) at kotlin.reflect.jvm.internal.ReflectProperties$LazySoftVal.invoke(ReflectProperties.java:93) at kotlin.reflect.jvm.internal.ReflectProperties$Val.getValue(ReflectProperties.java:32) at […]

Проверьте, является ли класс допустимым значением для KParameter

Учитывая следующий пример кода fun function(text: CharSequence) { println(text) } val textParam = ::function.parameters[0] val stringClass = String::class Как проверить, принимает ли textParam stringClass в качестве параметра?

Kotlin проверяет, требует ли функция экземпляра

Если KCallable создается с помощью Any()::toString тогда, когда он позже ссылается, вам не нужно передавать этот экземпляр Any (при использовании call ). Хотя, если он создан с использованием Any::toString (не экземпляр Any ), он должен передать Any экземпляр. Поэтому мой вопрос заключается в том, как я могу легко выяснить, нужно ли передавать этот параметр экземпляра […]

Проверьте, является ли функция расширением

Учитывая KFunction как я могу проверить, является ли это функцией расширения? Единственный способ, которым я знаю, – проверить, возвращает ли функция.extensionReceiverParameter значение null . Есть ли какой-либо другой или рекомендуемый способ?

Отражение Котлина: параметр неизвестного типа

Я провожу несколько экспериментов над отражением Котлина. Я пытаюсь получить объект отражения общего класса с его аргументом. В Java это будет ParameterizedType . Способ получить такое, используя API отражения Java, немного запутан: создать анонимный подкласс общего класса, а затем получить его первый тип супертипа. Вот пример: @Suppress("unused") @PublishedApi internal abstract class TypeReference<T> {} inline fun […]

Как получить пакет kotlin путем отражения

Библиотека отражения Kotlin определяет KDeclarationContainer , который Represents an entity which may contain declarations of any other entities, such as a class or a package. this::class возвращает KClass , который расширяет KDeclarationContainer , но как я могу получить родительский KDeclarationContainer ( KPackage ?)

Ссылка на метод определения свойств

Как я могу получить ссылку на метод установки свойств без использования kotlin-reflect? В принципе, если я напишу свой код в java-способе, это супер просто fun setValue(i: Int) = Unit val a: (Int) -> Unit = this::setValue Но для var value: Int Я получаю var value = 1 val a: KMutableProperty0<Int> = this::value

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

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

Делегат Kotlin с MultiDex на Android ниже 21

У меня есть следующий делегат … fun integerPref(initialValue: Int) = object : ObservableProperty<Int>(initialValue) { override fun afterChange(property: KProperty<*>, oldValue: Int, newValue: Int) { getSharedPreference(INTEGER_PREF, EasyInjection.mode) .edit() .putInt(property.toString(), newValue) .apply() } override fun getValue(thisRef: Any?, property: KProperty<*>): Int { return getSharedPreference(INTEGER_PREF, EasyInjection.mode) .getInt(property.toString(), initialValue) } } Этот делегат нацелен на удовлетворение предпочтений в отношении акций. Проблема […]

Intereting Posts