Kotlin 泛型问题



this传递给onResume时发生错误。不知何故它不承认this实现了ActivityLifecycleType,我错过了什么吗?

open class BaseActivity<ViewModelType: ActivityViewModel<*>>: RxAppCompatActivity(), ActivityLifecycleType {
   protected var viewModel: ViewModelType? = null
   @CallSuper
   override fun onResume() {
     super.onResume()
     viewModel?.onResume(this)  ==> Error Required Nothing, Find BaseActivity<ViewModelType>
   }
}
open class ActivityViewModel<in ViewType: ActivityLifecycleType> {
   fun onResume(view: ViewType) {
      // Do something
   }
}
interface ActivityLifecycleType {
   fun lifecycle(): Observable<ActivityEvent> 
}

Kotlin 的泛型更严格,你让你编写使用以下代码:

open class BaseActivity<ViewModelType : ActivityViewModel<ActivityLifecycleType>> : ActivityLifecycleType, RxAppCompatActivity() {
    protected var viewModel: ViewModelType? = null
    @CallSuper
    override fun onResume() {
        super.onResume()
        viewModel?.onResume(this@BaseActivity)  // ==> Error Required Nothing, Find BaseActivity<ViewModelType>
    }
}
open class ActivityViewModel<in ViewType : ActivityLifecycleType> {
    fun onResume(view: ViewType) {
        // Do something
    }
}
interface ActivityLifecycleType {
    fun lifecycle(): Observable<ActivityEvent>
}

我所做的是更改第一行中的声明。

Java太弱了,无法检查泛型类型,但Kotlin可以。

提到接下来你必须做两件事:

  1. BaseActivity中实现lifecycle或使其抽象。
  2. 建议使用 lateinit var viewModel 而不是可为 null 的类型

最新更新