我有一个抽象函数,我想在其中获取UTF-8
中的任何Activity Presenters
BaseActivity
所以我的函数应该只接受扩展了protected abstract fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T
的视图扩展了BasePresenter
的类
但是当我使用此功能时,会出现错误
BaseView
类型不匹配。
必填:T
发现:LauncherPresenter
我知道这是一个愚蠢的问题,但是我找不到我错的地方。
答案 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
以您使用的形式