【问题标题】:Kotlin Generic abstract functionKotlin 通用抽象函数
【发布时间】:2019-01-11 06:27:33
【问题描述】:

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

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

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

但是当我实现这个功能时,我得到一个错误

private lateinit var presenter: LauncherPresenter

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

类型不匹配。

必填:T

找到:LauncherPresenter

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

【问题讨论】:

  • LauncherPresenter的签名是什么?
  • 如果您想获得帮助,请添加更多代码

标签: android generics kotlin abstract-function


【解决方案1】:

您可以使用您的代码,但可以使用 Unchecked cast 之类的:

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

LauncherPresenter 不能成为 T 本身 以您使用的形式

【讨论】:

    【解决方案2】:

    您无需在函数中声明泛型,因为它已在顶部的 BaseActivity 中指定。

    BaseActivity 示例:

    abstract class BaseActivity<T : BasePresenter<V>, V : BaseView>() : 
    AppCompatActivity(), BaseView {
    
      protected abstract fun getPresenter(): T
    
    }
    

    其中 T 指定在顶部。

    当你在 BaseActivity 的 child 中实现函数时:

    class LauncherActivity() : 
    BaseActivity<LauncherPresenter<LauncherView>, LauncherView>(), LauncherView {
    
         private lateinit var presenter: LauncherPresenter
    
         //your override method
         protected override fun getPresenter(): LauncherPresenter = presenter
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-02
      • 1970-01-01
      • 2020-11-27
      • 1970-01-01
      • 2019-04-05
      • 1970-01-01
      • 2013-04-11
      • 2017-09-30
      相关资源
      最近更新 更多