将Android Studio更新到3.1.0并将kotlin版本更新到1.2.31后,我遇到了Observables的问题.
someVm值为null.
class ViewModel1(car: Car) : BaseObservable() {
val someVm = ObservableField<ViewModel2>(ViewModel2(car))
shipmentVm.get()!!
}
class ViewModel2(car: Car) : ItemViewModel() {
val car= ObservableField(car)
}
open class ItemViewModel : BaseObservable() {
val first = ObservableField(false)
val last = ObservableField(false)
}
非常感谢你!
解决方法:
我通过继承ObservableField解决了这个问题. FWIW,它不是有效的liskov,因为它增强了前提条件,但现在工作正常.
如果你在java中使用它,Null仍然可以进入这个类(并导致NPE).
import android.databinding.Observable
import android.databinding.ObservableField
class NonNullObservableField<T : Any>(
value: T, vararg dependencies: Observable
) : ObservableField<T>(*dependencies) {
init {
set(value)
}
override fun get(): T = super.get()!!
@Suppress("RedundantOverride") // Only allow non-null `value`.
override fun set(value: T) = super.set(value)
}