Intereting Posts
Kotlin: получить суперкласс из объекта класса – ошибка вывода объекта Смарт-бросок в «Boolean» невозможно после изменения стоимости Gradle Kotlin DSL: Определите версию Kotlin в уникальном месте Модуль библиотеки Android Kotlin экспортируется с плагином gradene maven-publish, не добавляющим зависимости Разбор объекта json с динамическим полем в Котлине Бинарная версия метаданных – 1.0.1, ожидаемая версия – 1.1.0 Заводские привязки Kodein бросают NotFoundException Как получить общий класс параметров в Котлине Запуск приложения TornadoFX из существующей программы Kotlin Kotlin – Значение преобразования при инициализации Определить сразу несколько переменных в Kotlin (например, Java: String x, y, z;) Как определить функцию oneline, вызывающую функцию с нулевыми переменными TornadoFX – удалить элемент с помощью контекстного меню правой кнопкой мыши Проблема Android в выборе и отмене выбора элементов в адаптере kotlin? Проверьте, прокручивается ли RecyclerView сверху (findFirstCompletelyVisibleItemPosition не работает)

Kotlin – объявить общий класс с параметром типа, который является общим

Таким образом, у меня есть класс BasePresenter. BaseMvpView – это интерфейс

open class BaseMvpPresenter<View : BaseMvpView> { } 

Я пытаюсь создать класс BaseMvpActivity, который параметризован с помощью BaseMvpPresenter следующим образом:

 abstract class BaseMvpActivity<T : BaseMvpPresenter> : BaseActivity(), BaseMvpView { } 

Но я получаю следующую ошибку:

 One type argument expected for class BaseMvpPresenter<View: BaseMvpView> 

Как я правильно объявляю это? Я хочу иметь возможность использовать BaseMvpActivity так:

 abstract class BaseMvpActivity<T : BaseMvpPresenter<U>, U : BaseMvpView> : BaseActivity(), BaseMvpView { abstract var presenter: T override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) presenter.onViewCreated(this) } override fun onDestroy() { presenter.onViewDestroyed() super.onDestroy() } } 

Вам необходимо передать параметр в BaseMVPPresenter . Вы можете добавить второй параметр в свой абстрактный класс следующим образом

 abstract class BaseMvpActivity<V: BaseMvpView, T : BaseMvpPresenter<V>> : BaseActivity(), BaseMvpView { } 

поэтому давайте скажем, что вы создаете представление для показа сообщений, тогда вы сделаете что-то вроде этого:

 class Activity : BaseMVPActivity<PostsView, PostPresenter<PostView>() { //Here comes your code } 

Надеюсь это поможет 🙂