Articles of дженерики

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

В Java я могу сделать что-то вроде этого: import java.util.List; import java.util.Map; class Foo { public final String s; // Parameters to constructor are generic, but constrained public <K> Foo(List<K> list, Map<K, String> map) { // Compute something from those parameters where result // has type independent of input type parameters. StringBuilder sb = new […]

Дженерики в Котлине с расширением

Я пытаюсь портировать java-проект на kotlin и иметь некоторые проблемы с ним. У меня есть структура MVP в java с использованием дженериков interface View<P extends Presenter> {} interface Presenter<V extends View> {} interface BaseView<P extends Presenter> extends View<P> {} class BaseActivity<P extends Presenter> extends AppCompatActivity implements BaseView<P> {} Сначала два класса у меня ошибка с […]

Общая функция в интерфейсе для возврата конкретной реализации

Для интерфейса я хочу добавить функцию, которая возвращает объект конкретной реализации. Так что с интерфейсом: interface Content { fun <???> cloneMe(): ? } и классы class Music: Content class Video: Content функция cloneMe() класса Music должна вернуть объект Music а функция cloneMe() класса Video должна вернуть объект Video . Ближайший я пришел: interface Content { […]

Kotlin: gettng rid Unchecked casts для Comparable

Я только что внедрил сортировку, чтобы познакомиться с Котлином и наткнулся на непроверенный бросок, от которого мне трудно избавиться. Реализация основана на kotlin.Comparable интерфейс: object SelectionSort { fun <T> sort(a: Array<Comparable<T>>) { val N = a.size for(i in 0..N – 2) { var min = i for(j in i + 1..N – 1) { if(less(a[j], […]

Получить загрузчик классов generics для разбора вложенного поля Parcelable generic

У меня есть оболочка Parcelable generic type, но конструкция Parcel не скомпилируется, потому что класс T не может быть определен в общем случае class MyItem<T : Parcelable> (val model: T) : Parcelable { constructor(parcel: Parcel) : this(parcel.readParcelable(T::class.java.classLoader)) { } } Есть ли какое-либо решение в этом случае?

Как разрешить нарушение ограничения конечного ограничения в Котлине?

Предположим, что у меня есть это объявление на Java, все в порядке. abstract class Start<T extends End> { public T end; } abstract class End<T extends Start> { public T start; } Тем не менее, это не нормально в Котлине, поскольку у Котлина есть ограничение на «циклический» параметр типа. abstract class Start<T : End<*>> { […]

Kotlin – абстрактная функция с общим типом возврата

Я новичок в Kotlin и очень беспокоюсь, пишу ли я правильный синтаксис или нет. У меня суперкласс, и я хочу написать общую абстрактную функцию, как показано ниже. abstract class A { abstract fun <T> getText() : Test<T> } class B : A() { override fun <T> getText(): Test<T> { return Test1() // Error – Required […]

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

Недавно я столкнулся с проблемой безопасного навигационного оператора ( ?. ) И дженериков. class A<T : Any?>(private var value: T) { fun function() { value?.let { val notNull: Any = it // ^^ // Type mismatch: // Required: Any // Found: T } } } Я считаю, что вышеприведенный код не должен работать, но он […]

Дженерики: абстрактный класс и тип ребенка

У меня есть абстрактный класс, называемый ведущим: abstract class Presenter<V> { fun bind(view: V) { … } … } И у меня есть реализации этих докладчиков: class FolderChooserPresenter : Presenter<FolderChooserView>() { … } И просмотрите классы, которые вызывают метод bind в указанной точке: class FolderChooserActivity : BaseView(), FolderChooserView { @Inject lateinit var presenter: FolderChooserPresenter // […]

Кинжал 2 с Kotlin, возвращающий тип с общим в ApplicationComponent

Я хочу вернуть тип с общим для того, чтобы его отображали подграфы, проблема в автогенерированных java-классах, я пытался что-то сделать, но один из способов решить это – удалить общий тип из AppComponent и вернуть простой объект , Есть ли более «правильный» подход? Вот AppComponent @Singleton @Component(modules = arrayOf(ApplicationModule::class)) interface ApplicationComponent { fun inject(activity: BaseActivity<MvpView, MvpPresenter<MvpView>>) […]