我有一个抽象的泛型类:
abstract class BasePresenter<View, Router> {
var view: View? = null
var router: Router? = null
abstract fun OnStart()
abstract fun OnStop()
}
我有一个子类:
class NewsListPresenter : BasePresenter<NewsListView, MainRouter>() {
override fun OnStop() {
//
}
override fun OnStart() {
//
}
}
我还有一个带有受保护抽象方法的类:
protected abstract fun getPresenter() : BasePresenter<Any?, Any?>
我在子类中重写了它:
override fun getPresenter(): BasePresenter<Any?, Any?> {
return NewsListPresenter() as BasePresenter<Any?, Any?>
}
Android Studio突出显示重写的函数,说明"This cast never succeed" . 我尝试使用 in Any
, out Any
和 *
但它不起作用 . 当我尝试使用 *
时,我无法在最初定义它的类中使用 getPresenter()
方法 . Android Studio抱怨类型不匹配:需要Nothing?,找到BaseFragment . 在Java中,相同的代码可以完美地工作,我不认为它会在Kotlin中出现问题 . 实现这个的正确方法是什么?
2 回答
“施放永远不会成功”的警告在这里是不正确的 . 警告的正确消息应该是“未经检查的强制转换”,因为此强制转换可能正确也可能不正确,但运行程序无法发现此消息 .
跟踪器中有an issue,事实上几天前是fixed . 该修复可能会使它成为Kotlin 1.0.3 .
请使用
BasePresenter<*,*>
.来自docs: