android - Kotlin 通用抽象函数

标签 android generics kotlin abstract-function

我有一个抽象函数,我想在 BaseActivity 中获取我的任何 Activity Presenters

protected abstract fun <T : BasePresenter<V>, V : BaseView> getPresenter(): T

所以我的函数应该只接受扩展 BasePresenter 的类,并且 View 扩展 BaseView

但是当我实现这个函数时,我收到一个错误

private lateinit var presenter: LauncherPresenter

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

Type mismatch.

Required: T

Found: LauncherPresenter

我知道这是一个愚蠢的问题,但我不明白我错在哪里。

最佳答案

您不需要在函数中声明泛型,因为它已经在顶部的 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

}

关于android - Kotlin 通用抽象函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51671303/

相关文章:

android - 使用 kotlin 在非 Activity 类中使用 Toast.makeToast 时出错

android - 带有 Kotlin 协程的房间观察数据库变化

android-studio - 在 Android Studio 中运行单个 .kt 文件

java 模板 如何显式指定在已命名的类上使用参数变量?

c# - 删除 List<T> 中的备用元素

android - Play Protect 阻止了我签名的 apk 的严重问题

带有自定义 View 选项卡的 Android TabLayout - 图标单击不会切换选项卡

Android Camera Api - Nexus 6 - 显示逆向的相机

android - 有新版本可用时强制更新 Android 应用程序

c# - 我可以修改此泛型方法以在不丢失(我的信仰)我想要的使用方式的情况下工作吗?