简体   繁体   English

Kotlin通用抽象函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM