Función de extensión de llamada dentro de la class Java como cualquier operador de RX

Creé una function de extensión,

fun <T> Observable<T>.subscribeWithErrorHandling(onNext: (T) -> Unit ,onError: ((throwable: Throwable) -> Unit)? = null): Subscription { //doing stuff } 

en la class de kotlin, no podré usarlo de esa manera

observable.subscribeWithErrorHandling(...)

Ahora, quiero usar esta function en mi class Java también. Ya veo que puedes llamarlo estáticamente como:

MyExtensionFile.subscribeWithErrorHandling

Pero en mi caso, necesitas algo más ya que está en medio de un flujo de RX. Y esa es la parte con la que estoy atrapado. ¿Esto es posible? o no hay manera de hacer algo como eso desde el código java?

Respuesta simple. No

Explicación: creo que eso no es posible, ya que eso significa que estás ampliando la class Observable , que es abstracta. Las extensiones de Kotlin añaden la misma funcionalidad al moverse fuera del tree de inheritance y en Java, en realidad estás atascado con la inheritance.

Entonces, la única opción que queda sería extender la class base Observable y crear su propia implementación de la misma que creo que sería indeseable en su caso. Una solución simple sería crear un nuevo método solo para Java que pueda tomar un observable y hacer la lógica requerida. O cree una class personalizada con la instancia de Observable como su miembro de instancia y luego escriba los methods necesarios dentro de ella (la forma estándar de OOPS). Este código podría luego ser utilizado tanto desde Kotlin como desde Java.

EDITAR: Creo que ya lo sabes, pero aún así te señalará esta pregunta .

La extensión funciona una de las ventajas de kotlin sobre Java. La encoding en kotlin le brinda esas ventajas, pero desafortunadamente eso no significa que pueda tener las características del lenguaje kotlin en el código Java.

Solución: transfiera el module donde desea usar funciones de extensión a kotlin.

  • Excepción: blockingConnect no se debe invocar en el subprocess UI a pesar de que subsubscribí en otro subprocess
  • Cómo controlar el flujo sin .flatMap, que rompe una stream reactiva que impide que operadores como distinctUntilChanged trabajen en toda la secuencia
  • Llamar a un RxJava Single In Kotlin Lambda
  • Kotlin - ¿Cómo crear una function de alias de RxJava flatmap ()?
  • ¿Cómo crear caching / versión caliente de rx.Single?
  • ¿Puedo crear un método de extensión Kotlin para agregar una suscripción rxJava a una suscripción compuesta?
  • Cómo fusionar 2 flujos separados, almacenar los datos rellenos y subscribirlos después de un time corto
  • Combinando los resultados de múltiples observables
  • Uso del map RXJava en Kotlin?
  • Mockito querido pero no invocado
  • Rx Java Retrofit con flatMap se ejecuta solo una vez