Kotlin: разрешить общее наследование

Прочитав те же статьи, я все еще не могу решить проблему с генериками:

У меня есть BaseActivity:

abstract class BaseActivity : MvpAppCompatActivity(), BaseView { abstract fun getPresenter():BasePresenter<BaseView> } 

Интерфейс BaseView для него

 interface BaseView : MvpView 

И точно BasePresenter

 open class BasePresenter<T : BaseView> : MvpPresenter<T>() 

Затем я создаю BaseConnectionView

 interface BaseConnectionView : BaseView 

И BaseConnectionPresenter

 class BaseConnectionPresenter<T : BaseConnectionView> : BasePresenter<T>() 

Поэтому, когда я создаю BaseConnectionActivity

 abstract class BaseConnectionActivity : BaseActivity(),BaseConnectionView { override abstract fun getPresenter(): BaseConnectionPresenter<BaseConnectionView> } 

У меня ошибка:

 Return type is BaseConnectionPresenter<BaseConnectionView>, which is not a subtype of overridden public abstract fun getPresenter():BasePresenter<BaseView> 

Но это подтип!

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

BaseConnectionPresenter – это подтип BasePresenter<T> с T: BaseConnectionView . Функция getPresenter возвращает BasePresenter<BaseView> . Проблема в том, что BasePresenter<T> не гарантируется быть BasePresenter<BaseView> . Следующие исправления:

 class BaseConnectionPresenter<T : BaseConnectionView> : BasePresenter<BaseView>() 

Решение было проще, чем я думаю, если использовать звездообразные проекции

Поэтому в BaseActivity я заменил

 abstract fun getPresenter():BasePresenter<BaseView> 

к

 abstract fun getPresenter():BasePresenter<*> 

И тогда я могу просто переопределить его новым ведущим, например

 override abstract fun getPresenter(): BaseConnectionPresenter<*>