Articles of отражение

Определите, является ли экземпляр экземпляром класса данных

Учитывая следующие классы abstract class SomeAbstractClass { abstract val name: String } data class DataClass( override val name: String ) : SomeAbstractClass() class NoDataClass( override val name: String ) : SomeAbstractClass() Для любого экземпляра SomeAbstractClass я могу определить, является ли он классом данных, не полагаясь на проверку типов? Некоторые предпосылки: это казалось лучшим способом комбинирования […]

Котлин: назначается «это»?

Я пытаюсь упростить Parcelable код в Kotlin: public class C() : Parcelable { var b1: Boolean = false var b2: Boolean = false var b3: Boolean = false var i1: Int = 0 var i2: Int = 0 val parcelBooleans = listOf(b1, b2, b3) val parcelInts = listOf(i1, i2) override fun writeToParcel(p: Parcel, flags: Int) […]

Как получить KProperty1 из KProperty0

В моем API я переопределил invoke на KProperty0 для выполнения определенных действий, и я предоставляю экземпляр для получения этих свойств: api { instance::property1 { /* Do stuff */ } } Но вместо KProperty0 мне нужен соответствующий KProperty1 . В настоящее время я ищу свойство класса с тем же именем, что и KProperty0 . operator fun […]

Kotlin KFunction reflection – получить значения параметров

Чтобы создать простую аннотацию, которая регистрирует вызовы функций, я пытаюсь захватить следующие атрибуты из функции, которая имеет аннотацию: Имя функции Имена параметров Значения параметров То, что я до сих пор использует KCallable в качестве значения, делает захват имени и имен из списка KParameter довольно простым. Однако я не могу понять, как получить значения указанных параметров, […]

Выполнить функцию из строки?

У меня есть функция, определенная в строке, и вам нужен способ ее создания: val myFunction = """fun (file:Int, rank:Int, playerHasWhite: Boolean): Boolean { val a = file + 3 val b = rank – 2 if (playerHasWhite) a>b else a<b } """ Итак, есть ли простой способ, путем отражения, создать экземпляр myFunction? (Я заметил, что […]

Как рекурсивно перебирать атрибуты JsonObject?

Я разбираю строки в объектах JSON, и мне нужно иметь возможность рекурсивно перебирать атрибуты объектов. Поэтому я пытаюсь создать функцию, которая выполняет итерацию через атрибуты объекта, и если атрибут не является примитивным, тогда снова вызывайте функцию (рекурсию) с самим атрибутом. В Javascript я бы решил: function forEachAttribute(object) { for (let key in object) { let […]

Как получить доступ к атрибутам / методам в стандартном параметре класса

Новое в Котлин, прибывающее из C #. Я пытаюсь создать класс, который принимает сменный объект класса через generics. В классе я хотел бы получить доступ к значениям атрибутов и методам вызова в классе. Я предполагаю, что это должно быть через какой-то механизм отражения. Копаясь через ссылки Kotlin, я пытаюсь применить предложения к своему коду, однако […]

Как получить ссылку на класс от KParameter в котлин?

Нижеприведенный код посвящен размышлению. Он пытается сделать 2 вещи: case1() создает экземпляр класса SimpleStudent , он работает. case2() создает экземпляр класса Student , а не работает. Причина, по которой case2() не работает так же хорошо, как вопрос, заключается в том, что внутри generateValue() : Я не знаю, как проверить, что это тип kotlin или мой […]

Оператор рефлексии Котлина получает реализацию

Я изучаю Kotlin, используя Fedora 25 OpenJDK 8 и Kotlin 1.1. Я скопировал пример с сайта Kotlin: https://kotlinlang.org/docs/reference/delegated-properties.html и изменил оператор get. class Example { var p: String by Delegate() } class Delegate { operator fun getValue(thisRef: Any?, property: KProperty<*>): String { // My implementation return property.getter.call(thisRef) as String } operator fun setValue(thisRef: Any?, property: […]

Убедитесь, что класс реализует интерфейс. Котлин

Я хочу проверить, что дочерний класс SignalPayload реализует интерфейс IConvertible . Как я могу это сделать? sealed class SignalPayload { companion object { fun trueTypeInstance(type: KClass<SignalPayload>) : SignalPayload? { // if (*** __ KClass<SignalPayload> implemented IConvertible ___ **) …… } } } object Empty : SignalPayload() data class BadData(val message: String = "BAD") : SignalPayload() […]