Общее наследство Котлина

У меня проблема, и я не могу ее решить. У меня есть интерфейс Presenter который является общим и принимает любой подтип интерфейса MvpView

 interface Presenter<in V : MvpView> { fun attachView(view: V) fun detachView() } 

Тогда у меня есть еще один абстрактный класс BasePresenter который является подтипом Presenter

 abstract class BasePresenter<V : MvpView> : Presenter<V> { protected var mvpView: V? = null protected get override fun attachView(view: V) { this.mvpView = view } override fun detachView() { mvpView = null } } 

И у меня есть класс

 abstract class BaseMvpActivity<P : BasePresenter<T>, T : MvpView> : BaseActivity(), MvpView { @Inject lateinit protected var presenter: P protected abstract fun inject() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) inject() initPresenter(savedInstanceState) } protected fun initPresenter(savedInstanceState: Bundle?) { presenter.attachView(this) } override fun onDestroy() { presenter.detachView() super.onDestroy() } } 

И там у меня ошибка при попытке вызвать presenter.attachView(this)

 Type mismatch: inferred type is BaseMvpActivity<P, T> but T was expected 

Я также попытался сделать этот abstract class BaseMvpActivity<P : BasePresenter<*>> : BaseActivity() но также имеет такую ​​ошибку, как Type mismatch: inferred type is BaseMvpActivity<P> but Nothing was expected

Как я могу решить эту проблему? Спасибо.

    Почему вы хотите сделать BasePresetner универсальным, поскольку вы не собираетесь возвращать значение этого родового типа. Мы используем generics для предотвращения приведения типов возвращаемого значения из метода и предотвращения возможных исключений Cast.

    Что я хочу сказать, что вам не нужно делать BasePresenter родовым. Просто объявите mvpView как MvpView и используйте его методы. Предположим, что если вы сделаете его общим, нет плюсовой точки, которую вы достигнете, потому что у вас все равно будет доступ к только методу MvpView (а не к sub-class ).

     abstract class BasePresenter : Presenter<V> { protected var mvpView: MvpView = null protected get override fun attachView(view: MvpView) { this.mvpView = view } override fun detachView() { mvpView = null } } 

    Надеюсь, поможет.

    Intereting Posts
    Android Parcelable в Kotlin: CREATOR не найден на Parcelable class Android Kotlin меняет свой массив на spinner на карту Как легко потреблять продюсера канала Kotlin на Java? Установить значение поля без вызова метода set – Kotlin Котлин: Почему? оператор генерирует нулевые проверки при компиляции для jvm? Получил NoClassDefFoundError при прохождении карты лямбда Контекст null, внезапно получая NPE после перехода на API 27 Проблема с Android Studio и Main Activity.kt, ожидающая объявления участника Несоответствие дженериков Котлина в иерархии классов почему kotlin использует === сравнить примитивный тип, равный друг другу, если они имеют одинаковое значение Проверять списки объектов для равенства без проверки ордера в свойстве List Kotlin Android начинает новую деятельность Firebase SDK в Kotlin – onChildChanged не стреляет в первого ребенка в списке Kotlin: Как запустить функцию с задержкой с помощью функции расширения Является ли Kotlin 100% совместимым с ART на Android?