Kotlin:解决genericsinheritance

阅读同样的文章后,我仍然不能解决generics的问题:

我有BaseActivity:

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

BaseView界面

 interface BaseView : MvpView 

并确保BasePresenter

 open class BasePresenter : MvpPresenter() 

然后我创建BaseConnectionView

 interface BaseConnectionView : BaseView 

和BaseConnectionPresenter

 class BaseConnectionPresenter : BasePresenter() 

所以当我创建BaseConnectionActivity

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

我有错误:

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

它是子types!

我怎么解决这个问题?

BaseConnectionPresenter是具有T: BaseConnectionViewBasePresenter T: BaseConnectionView 。 函数getPresenter只返回BasePresenter 。 有一个问题,因为BasePresenter不保证是BasePresenter 。 以下修复它:

 class BaseConnectionPresenter : BasePresenter() 

如果使用星形投影,解决方案比我想象的要容易

所以在我替换的BaseActivity

 abstract fun getPresenter():BasePresenter 

 abstract fun getPresenter():BasePresenter<*> 

然后我可以用新的主持人覆盖它,就像

 override abstract fun getPresenter(): BaseConnectionPresenter<*> 
Interesting Posts