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