Articles of овеществление

Фильтр для общего типа без отражения или литья

В Котлине существует ограниченная форма овеществленных дженериков . Есть ли способ использовать reification для фильтрации для универсального типа без использования getClass() или as или любой вид странной аннотации, т.е. просто используя ключевое слово? Например, у меня есть следующая структура: import java.util.* internal class Layout<out T : LayoutProtocol>(val t: T) { fun getName(): String { return […]

Параметр типа Ketlin reified не используется

Я экспериментировал с установкой неинициализированных значений и пытался заставить следующее работать. Это в основном любопытство в силе (и ограничениях) повторяющихся дженериков. Я пытался предоставить значения по умолчанию для необязательных параметров классов данных. inline fun <reified T> uninitialized(): T = when (T::class) { Long::class -> -1L // Type mismatch. Required: T Found: Long String::class -> "" […]

Как хранить данные типа reified в полях экземпляров в Kotlin?

В настоящее время я пишу DSL для библиотеки, и я хотел бы предоставить метаданные типа с использованием параметров типа reified вроде этого: val config = Config.create() .consumerFor<MyType>{ // consume } Моя проблема в том, что я могу использовать только ключевое слово reified в inline функциях и inline функцию. Я не могу использовать такие поля экземпляра, […]

Генериры Котлина Массив <T> приводит к «Невозможно использовать T как параметр типа reified. Вместо этого используйте класс, но List <T> не делает

У меня есть интерфейс, содержащий массив (или список) T и некоторые метаданные. interface DataWithMetadata<T> { val someMetadata: Int fun getData(): Array<T> } Если я напишу простейшую реализацию интерфейса, я получаю ошибку компиляции в emptyArray() : «Нельзя использовать T в качестве параметра типа reified. Вместо этого используйте класс». class ArrayWithMetadata<T>(override val someMetadata: Int): DataWithMetadata<T> { private […]

Как я могу вызвать методы Kotlin с помощью reified generics из Java?

У меня есть следующий метод в Котлине: inline fun <reified T> foo() { } Если я попытаюсь вызывать это из Java следующим образом: myObject.foo(); Или вот так: myObject.<SomeClass>foo(); Я получаю следующую ошибку: java: foo () имеет личный доступ в MyClass Как я могу вызвать метод foo из Java?