Android Kotlin泛型问题
将Android Kotlin泛型问题,android,generics,kotlin,reactive-programming,Android,Generics,Kotlin,Reactive Programming,将此传递到onResume时出错。 不知怎的,它没有意识到这个实现了活动生命周期类型,我是不是遗漏了什么 打开类BaseActivity:rxappCompativity(),ActivityLifecycleType{ 受保护的var viewModel:ViewModelType?=null @超级呼叫 重写onResume(){ super.onResume() viewModel?.onResume(此)==>无需任何错误,查找BaseActivity } } 开放类活动视图模型{ 恢复
此
传递到onResume
时出错。
不知怎的,它没有意识到这个
实现了活动生命周期类型
,我是不是遗漏了什么
打开类BaseActivity:rxappCompativity(),ActivityLifecycleType{
受保护的var viewModel:ViewModelType?=null
@超级呼叫
重写onResume(){
super.onResume()
viewModel?.onResume(此)==>无需任何错误,查找BaseActivity
}
}
开放类活动视图模型{
恢复时的乐趣(视图:ViewType){
//做点什么
}
}
接口活动LifecycleType{
乐趣生命周期():可观察
}
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>
}
打开类BaseActivity:ActivityLifecycleType,rxappCompativity(){
受保护的var viewModel:ViewModelType?=null
@超级呼叫
重写onResume(){
super.onResume()
viewModel?.onResume(this@BaseActivity)//=>错误不需要任何内容,查找BaseActivity
}
}
开放类活动视图模型{
恢复时的乐趣(视图:ViewType){
//做点什么
}
}
接口活动LifecycleType{
乐趣生命周期():可观察
}
我所做的是更改第一行中的声明
Java太弱,无法检查泛型类型,但Kotlin可以
提到下一步你必须做两件事:
BaseActivity
中实施lifecycle
,或将其抽象化lateinit var viewModel
而不是可为空的类型BaseActivity
是否扩展了ViewType
?编译器说,onResume
不需要任何东西,因为RxAppCompatActivity
有方法onResume
没有参数BaseActivity
覆盖RxAppCompatActivity
的onResume
我编辑了文章,但是在您声明的视图模型上调用了BaseActivity
:的参数类型ActivityViewModel
解析为Nothing
,因此onResume
需要一种类型的Nothing
。请尝试使用this@BaseActivity
而不是这个。该死!我真蠢,已经修好了,哈哈哈谢谢@nhaarman!“建议使用lateinit var viewModel而不是可为null的类型”。没有。我没说你的问题已经解决了:)@ice1000那句话太宽泛了。在适当的时候使用lateinit
,这意味着变量保证在距离对象初始化不太远的某个点初始化,并且如果之后未设置为null。用例包括依赖注入和在Android生命周期方法中分配的变量,在这些方法中,您第一次接收到上下文。谢谢