我有一个抽象泛型类:
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 抽象方法的类:
protected abstract fun getPresenter() : BasePresenter<Any?, Any?>
我在子类中重写了它:
override fun getPresenter(): BasePresenter<Any?, Any?> {
return NewsListPresenter() as BasePresenter<Any?, Any?>
}
Android Studio 高亮显示重写的函数强制转换说“此强制转换永远不会成功”。我尝试使用 in Any
、out Any
和 *
但它不起作用。当我尝试使用 *
时,我无法在最初定义它的类中使用 getPresenter()
方法。 Android Studio 提示类型不匹配:不需要什么?,发现 BaseFragment。
在 Java 中,相同的代码可以完美运行,我认为这在 Kotlin 中不会成为问题。什么是正确的实现方式?
最佳答案
这里的“cast never can never succeed”警告是不正确的。警告的正确消息应该是“未经检查的转换”,因为此转换可能正确也可能不正确,但这不能通过运行您的程序来发现。
关于generics - 如何在 Kotlin 中正确覆盖返回泛型类实例的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37741830/