generics - 如何在 Kotlin 中正确覆盖返回泛型类实例的方法

标签 generics kotlin

我有一个抽象泛型类:

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 Anyout Any* 但它不起作用。当我尝试使用 * 时,我无法在最初定义它的类中使用 getPresenter() 方法。 Android Studio 提示类型不匹配:不需要什么?,发现 BaseFragment。 在 Java 中,相同的代码可以完美运行,我认为这在 Kotlin 中不会成为问题。什么是正确的实现方式?

最佳答案

这里的“cast never can never succeed”警告是不正确的。警告的正确消息应该是“未经检查的转换”,因为此转换可能正确也可能不正确,但这不能通过运行您的程序来发现。

an issue在实际上是 fixed 的跟踪器中几天前。修复可能会在 Kotlin 1.0.3 中出现。

关于generics - 如何在 Kotlin 中正确覆盖返回泛型类实例的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37741830/

相关文章:

java - 枚举的通用类,值的数量

java - 自定义对象列表作为泛型方法的参数

android - 如何解决不同范围的绑定(bind)?

android - kotlin,我们如何在使用参数传递到的另一个类中更改实际变量的值?

kotlin - Kotlin 值类与内联类有何不同?

kotlin - 如何在Kotlin中测试使用readline(System .`in`)的代码?

c# - 从 IEnumerable<T> 获取类型 T

c# - 如何实现根据传递的类型返回对象的方法

generics - 为什么 Java 不允许在泛型方法定义中封装?

android - 如何为小米、红米、三星、华为等创建Android虚拟设备AVD