I solved this by subclassing the ObservableField. FWIW, this is not a valid Liskov, because it strengthens the prerequisites, but at the moment it works perfectly.
Nulls can still break into this class (and lead to NPE) if you use it from java.
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)
}
source
share