[英]Kotlin Generic abstract function
I have an abstract function, where I want to get any of my Activity Presenters
in BaseActivity
我有一个抽象函数,我想在其中获取
BaseActivity
任何Activity Presenters
protected abstract fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T
So my function shoud accept only class that extends BasePresenter
with view that extands BaseView
所以,我的功能768,16只接受一个扩展类
BasePresenter
与观点extands BaseView
But when I implimment this function, I get an error 但是当我使用此功能时,会出现错误
private lateinit var presenter: LauncherPresenter
override fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T = presenter
Type mismatch.
类型不匹配。
Required: T
必填:T
Found: LauncherPresenter
找到:LauncherPresenter
I know this is stupid question, but I cant get where I am wrong. 我知道这是一个愚蠢的问题,但我无法找到我错的地方。
You don't need to declare generic in your function, because it already specified in your BaseActivity at the top. 您不需要在函数中声明泛型,因为它已经在您的BaseActivity顶部指定了。
Example your BaseActivity : 示例您的BaseActivity :
abstract class BaseActivity<T : BasePresenter<V>, V : BaseView>() :
AppCompatActivity(), BaseView {
protected abstract fun getPresenter(): T
}
Where T specified at the top. 其中T在顶部指定。
When you implement function in child of BaseActivity: 在BaseActivity的子项中实现功能时:
class LauncherActivity() :
BaseActivity<LauncherPresenter<LauncherView>, LauncherView>(), LauncherView {
private lateinit var presenter: LauncherPresenter
//your override method
protected override fun getPresenter(): LauncherPresenter = presenter
}
You can use your code but with Unchecked cast
like: 您可以使用代码,但可以使用
Unchecked cast
例如:
override fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T = presenter as T
LauncherPresenter
can't become T
itself in the form that you use LauncherPresenter
无法以您使用的形式成为T
本身
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.