Kotlin通用抽象函数

时间:2018-08-03 11:10:22

标签: android generics kotlin abstract-function

我有一个抽象函数,我想在其中获取UTF-8中的任何Activity Presenters

BaseActivity

所以我的函数应该只接受扩展了protected abstract fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T 的视图扩展了BasePresenter的类

但是当我使用此功能时,会出现错误

BaseView
  

类型不匹配。

     

必填:T

     

发现:LauncherPresenter

我知道这是一个愚蠢的问题,但是我找不到我错的地方。

2 个答案:

答案 0 :(得分: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

}

答案 1 :(得分:1)

您可以将代码与Unchecked cast一起使用,例如:

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

LauncherPresenter本身不能成为T 以您使用的形式