Articles of дженериков

Как реализовать параметризованные интерфейсы в Котлине

Я попытался реализовать два интерфейса с параметризованными типами в Kotlin и получил ошибку компилятора: Type Mismatch, Required T, Found Candy<T, C> , в последней строке кода при добавлении элемента в контейнер container.add(this) . Я смог сделать это на Java 8 с единственным параметром и сырыми типами, но не смог заставить его работать в Котлине. interface […]

Как добавить содержимое одной коллекции в новую коллекцию

Я пытаюсь переопределить метод, который вызывает суперкласс и добавляет возвращаемые значения в новую коллекцию (это необходимо, потому что возвращаемое значение суперкласса является неизменным). Идиоматическая Java для этого заключается в следующем: public class JaxrsApplication extends Application { @Override public Set<Class<?>> getClasses() { HashSet<Class<?>> classes = new HashSet<>(super.getClasses()); classes.add(PlainTextWriter.class); classes.add(PageResource.class); return classes; } } Я пытаюсь реализовать […]

Наследование дженериков Котлина – несоответствие типов

Я пытаюсь создать набор поставщиков для объектов realm. Вот пример структуры, которую я пытался создать: Интерфейс: interface IDataProvider<out T : RealmObject> { fun getRealmObject(): T } Базовый класс провайдера со вспомогательной функцией для типизированного экземпляра поставщика: open abstract class BaseProvider<out T : RealmObject> constructor(protected val context: Context?) : IDataProvider<T> { companion object { fun <T […]

Наследование Котлина

В настоящее время я участвую в разделении своего грязного кода на парадигму DDD (примечание, обучение). IEntity ( IEntity , IUser ) – это доменный слой, состоящий из интерфейса, который затем реализован на уровне данных ( BaseEntity , User ). Доступ к данным осуществляется через шаблон репозитория. Но, как я определил для IUserRepository для возврата IUser […]

Каково место в иерархии типов типов с возможностью NULL?

Вы можете наследовать тип A от типа B , но всякий раз, когда вы определяете тип A вы получите тип A? (без ограничений) бесплатно. Но где он лежит именно в иерархии типов? A? наследуется от A или наоборот? Я спрашиваю об этом, потому что я озадачен таким кодом: open class Foo { fun foo() : […]

Встроенный псевдоним для функции Kotlin, который включает в себя дженерики?

Я сократил имена некоторых часто используемых иностранных функций (которые я не контролирую) с «псевдонимами», основываясь на советах, которые я получил в более раннем вопросе . Это хорошо работает для функций расширения; Тем не менее, у меня есть несколько функций верхнего уровня, которые я хотел бы использовать для псевдонимов. Для упрощенного примера рассмотрим функцию generateSequence . […]

Проблема генерических свойств Котлина

У меня возникли проблемы с Kotlin при переводе моего проекта андроида из java в Kotlin. Скажем, у меня есть интерфейс I и интерфейс O, который расширяет интерфейс I. interface I{ } interface O: I{ } И общий класс A, который имеет общий параметр V, который расширяет интерфейсI, и общий класс B, который расширяет класс A: […]

Kotlin переопределяет забаву с подтипом

У меня возникли проблемы с наследованием интерфейса, содержащего метод / fun базового типа, который я бы хотел переопределить как подтип в классе, реализующем его. Пока у меня есть интерфейс interface IModel { fun convert(dataModel: BaseDataModel) } И класс, реализующий это: class SettingsModel: IModel { override fun convert(dataModel: BaseDataModel) { // Conversion of models here } […]

Подклассификация класса для изменения переменной параметра типа в Котлине

Этот вопрос вытекает из моего предыдущего вопроса о Generic Kotlin . Пожалуйста, посмотрите там дополнительную информацию о мотивации этого вопроса. У меня есть класс, который принимает параметр неограниченного типа trait Handler<T> { fun handle(result: T) } Мне нужно создать экземпляр Handler где T является List<O> , и поэтому является неизменным. Моя мысль заключалась в подклассе […]

Критики Котлина и неправильный вывод

Рассмотрим общий class Item и определенный class Event который наследует его: open class Item<T> { fun copyFrom(item: T) { if (this is Event && item is Event) { owner = item.owner value = item.value } } } class Event : Item<Event> { open var owner = "" open var value = 0 } Благодаря выводу […]