在java类中调用扩展函数作为任何RX操作符

我创建了一个扩展函数,

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

在kotlin类中,我将能够以这种方式使用它

observable.subscribeWithErrorHandling(...)

现在,我想在我的java类中使用这个函数。 我已经看到,你可以静态调用它:

MyExtensionFile.subscribeWithErrorHandling

但在我的情况下,你需要别的东西,因为它是一个RX流的中间部分。 这是我坚持的部分。 这甚至可能吗? 或没有办法做这样的事情,从Java代码?

简单的答案。 No

解释 – 我相信这是不可能的,因为那意味着你将扩展抽象的Observable类。 Kotlin扩展通过移出继承树来添加相同的功能,在Java中,您几乎坚持继承。

所以剩下的唯一选择就是扩展基本的Observable类,并创建你自己的实现,我认为这对你的情况是不需要的。 一个简单的解决方案就是创建一个Java的新方法,它可以观察并执行所需的逻辑。 或者使用Observable实例作为实例成员创建一个自定义类,然后在其中编写所需的方法(标准的OOPS方式)。 这个代码可以从Kotlin和Java中使用。

编辑:我相信你已经知道这一点,但仍然会指出你这个问题 。

扩展功能是kotlin优于Java的优点之一。 kotlin中的编码为您提供了这些优势,但不幸的是,这并不意味着您可以在Java代码中使用kotlin语言功能。

解决方案:将希望使用扩展功能的模块移植到kotlin。