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 } 

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