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: BaseConnectionView
的BasePresenter
T: BaseConnectionView
。 函数getPresenter
只返回BasePresenter
。 有一个问题,因为BasePresenter
不保证是BasePresenter
。 以下修复它:
class BaseConnectionPresenter : BasePresenter()
如果使用星形投影,解决方案比我想象的要容易
所以在我替换的BaseActivity
abstract fun getPresenter():BasePresenter
至
abstract fun getPresenter():BasePresenter<*>
然后我可以用新的主持人覆盖它,就像
override abstract fun getPresenter(): BaseConnectionPresenter<*>