Articles of разное

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

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

Метод вызова в родовом классе через отражение

Я пытаюсь настроить функцию, принимающую общий класс, который, в свою очередь, вызывает метод внутри этого класса посредством отражения. Ниже код компилируется, однако, когда я его запускаю, я получаю эту ошибку: java.lang.IllegalArgumentException: Callable expects 2 arguments, but 1 were provided. Почему Котлин утверждает, что должно быть 2 аргумента, когда метод берет только один? Какими должны быть […]

Параметр принудительного типа должен быть инвариантным на сайте-участнике, когда он является ковариантным на сайте объявления

Я KProperty1 функцию расширения на KProperty1 . Функция должна принимать аргумент, который расширяет тип значения свойства ( R ), хотя KProperty1 является ковариантным в параметре типа R Немного надуманный пример был бы следующим, хотя мое использование более законно. data class Data(val value: String) fun <V> KProperty1<*, V>.setMagically(value: V) { this.javaField?.set(null, value) } fun test() { […]

Дженерики на 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> Но для этого […]

Как передать параметр типа в ссылку на общий конструктор класса?

Предположим, что следующий код: class ConstructMe<T> {} data class Test<T> constructor(var supplier: () -> ConstructMe<T>) {} fun main(args: Array<String>) { works<Int>() breaks<Int>() } fun <T> works() { Test<T>({ ConstructMe<T>() }) // (1) any one class type parameter can be removed like: Test({ ConstructMe<T>() }) // (2) still works (class type inferred by argument type) Test<T>({ […]

Kotlin: Дженерики, отражение и различие между типами T и T: Любые

Если я попытаюсь получить доступ к javaClass общего типа T, компилятор Kotlin жалуется, что T не является подтипом kotlin.Any class Foo<T> (val t: T ){ val cls = t.javaClass // Error, T is not a subtype of kotlin.Any } Если определить T как подтип Any, все работает нормально. class Bar<T:Any> (val t: T ){ val […]

Как получить аргументы фактического типа для параметра reified generic в Котлин?

Используя параметры типа reified , можно написать встроенную функцию, которая работает с параметром типа через отражение во время выполнения: inline fun <reified T: Any> f() { val clazz = T::class // … } Но когда f вызывается с параметром, который сам является общим классом, похоже, нет способа получить его фактические аргументы типа через T::class : […]