Kotlin泛型的问题

传递给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而不是可空类型