2

我有一个抽象函数,我想在其中获取任何我Activity PresentersBaseActivity

protected abstract fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T

所以我的函数应该只接受扩展BasePresenter视图的类BaseView

但是当我实现这个功能时,我得到一个错误

private lateinit var presenter: LauncherPresenter

override fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T = presenter

类型不匹配。

要求:T

找到:LauncherPresenter

我知道这是个愚蠢的问题,但我不知道我错在哪里。

4

2 回答 2

3

您无需在函数中声明泛型,因为它已在顶部的BaseActivity中指定。

例如你的BaseActivity

abstract class BaseActivity<T : BasePresenter<V>, V : BaseView>() : 
AppCompatActivity(), BaseView {

  protected abstract fun getPresenter(): T

}

其中T在顶部指定。

当您在 BaseActivity 的子项中实现功能时:

class LauncherActivity() : 
BaseActivity<LauncherPresenter<LauncherView>, LauncherView>(), LauncherView {

     private lateinit var presenter: LauncherPresenter

     //your override method
     protected override fun getPresenter(): LauncherPresenter = presenter

}
于 2018-08-03T11:47:12.927 回答
1

您可以使用您的代码,但可以使用 Unchecked cast

override fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T = presenter as T

LauncherPresenter不能T以你使用的形式成为自己

于 2018-08-03T11:44:31.913 回答