RxJava 2 requiere un tipo de retorno Observable diferente de RxJava 1 (Kotlin)

Estoy actualizando mi proyecto de RxJava 1 a RxJava 2. Tengo este método de extensión (uso Kotlin):

fun <T : DatabaseModel> Observable<DataSnapshot?>.toObjectObservable(type: Class<T>): Observable<T> { return this.map { if (it == null) { return@map null } val data = it.getValue(type) data?.setId(it.key) data } } 

Cuando usé RxJava 1, todo estaba bien. Pero a medida que reemplazaba los observables con nuevos Observables de RxJava 2 (io.reactivex.Observable) se produjo un error. Ahora el IDE dice que necesita seguir el tipo de devolución:

 ((Datasnashot) -> T)! 

en lugar de proporcionar

 (Datasnapshot) -> T? 

¿Tienes alguna idea de lo que puede causar este comportamiento diferente? ¿Cómo debo cambiar el código para arreglarlo?

RxJava 2 Observable ya no acepta null de ninguna manera. ¿Tu map lambda está produciendo un T? pero tiene que ser un T Puede asumir que la input no es nula, y si también asume que DataSnapshot.getValue() no es nulo, su código se acorta a

 fun <T : DatabaseModel> Observable<DataSnapshot>.toObjectObservable(type: Class<T>): Observable<T> { return this.map { val data = it.getValue(type)!! data.setId(it.key) data } } 

Por supuesto, esto será NPE (envuelto en un Observable.error() ) si DataSnapshot.getValue() devuelve nulo. Si lo desea, podría manejarlo de manera especial, por ejemplo, colocándolos.

 fun <T : DatabaseModel> Observable<DataSnapshot>.toObjectObservable(type: Class<T>): Observable<T> { return this.flatMap { val data = it.getValue(type) data.?setId(it.key) if (data != null) Observable.just(data) else Observable.empty() } } 
  • Obtiene N últimos objects emitidos por observables en RxJava2
  • Cómo hacer un event handling errores en rxjava2 en android
  • Completable.andThen resultados en "other is null"
  • ¿Comportamiento incorrecto de Maybe <List <T >> en Room?
  • Single.zip completando antes de Success
  • Kotlin no puede inferir el tipo cuando utiliza la reference de método en Flowable
  • RxJava zipCon error IDE en Kotlin con Android Studio 3.0
  • RxAndroid - Manejar errores con el operador Zip
  • Convirtiendo un Observable en un Flujo con contrapresión en RxJava2
  • Extraño comportamiento de componer y ObservableTransformer en RxJava cuando el genérico pasado se extiende
  • No se pudo deducir Kotlin y RxJava