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可以。
提到接下来你需要做两件事:
- 在
BaseActivity
实现lifecycle
或将其抽象化。 - 建议使用
lateinit var viewModel
而不是可空类型