作为任何RX操作符调用java类内的扩展函数

作为任何RX操作符调用java类内的扩展函数,java,android,kotlin,rx-java,kotlin-android-extensions,Java,Android,Kotlin,Rx Java,Kotlin Android Extensions,我创建了一个扩展函数 fun <T> Observable<T>.subscribeWithErrorHandling(onNext: (T) -> Unit ,onError: ((throwable: Throwable) -> Unit)? = null): Subscription { //doing stuff } fun Observable.subscribeWizorRorHandling(onNext:(T)->单位,onError:((t

我创建了一个扩展函数

fun <T> Observable<T>.subscribeWithErrorHandling(onNext: (T) -> Unit ,onError: ((throwable: Throwable) -> Unit)? = null): Subscription {
//doing stuff
}
fun Observable.subscribeWizorRorHandling(onNext:(T)->单位,onError:((throwable:throwable)->单位)?=null):订阅{
//做事
}
在kotlin课堂上,我将能够以这种方式毫无问题地使用它

可观察。订阅错误处理(…)

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

MyExtensionFile.subscribeWithErrorHandling


但在我的情况下,你需要一些其他的东西,因为它是一个接收流的中间。这就是我一直坚持的部分。这可能吗?或者没有办法从java代码中执行类似的操作?

简单回答<代码>否

解释-我认为这是不可能的,因为这意味着您正在扩展抽象的
可观察类。Kotlin扩展通过移出继承树添加了相同的功能,在Java中,您几乎被继承卡住了

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


编辑:我相信您已经知道这一点,但仍将向您指出这一点

简单的答案<代码>否

解释-我认为这是不可能的,因为这意味着您正在扩展抽象的
可观察类。Kotlin扩展通过移出继承树添加了相同的功能,在Java中,您几乎被继承卡住了

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


编辑:我相信您已经知道这一点,但仍将向您指出这一点

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


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

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


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

如果您知道此问题已被询问和回答,请将此问题标记为重复问题。我相信他已经知道问题中提供的解决方案,他想要的是其他东西,在实例化可观察的
后,能够在Rx流中使用该方法。在实例上调用他的自定义方法。这就是为什么我会这样回答。在他的帖子中:“这就是我一直坚持的部分。这可能吗?”在复本中:“我做错了什么?这可能吗?”-怎么不一样?我们不想要300万份同样的问题。标记为副本,如果您觉得副本的答案不够,请回答副本。这就是网站的运作方式。如果你知道这个问题已经被问到和回答,请将这个问题标记为重复。我相信他已经知道问题中提供的解决方案,他想要的是其他东西,在他实例化
可观察的
后,能够在接收流中使用该方法。在实例上调用他的自定义方法。这就是为什么我会这样回答。在他的帖子中:“这就是我一直坚持的部分。这可能吗?”在复本中:“我做错了什么?这可能吗?”-怎么不一样?我们不想要300万份同样的问题。标记为副本,如果您觉得副本的答案不够,请回答副本。这是网站的工作方式。可能是@VinceEmigh的重复。不是,这是一个不同的用例。扩展函数被编译成静态方法,如链接副本中所述。这就是答案。如果您正在寻找一个工作环境,请指定它。正如这篇文章目前的情况,问题和答案都与副本相匹配(不管细节如何,类似于NPE问题)。回答只有细微差别的问题是一种浪费,没有任何真正的差别,因为它不会增加价值,只会增加@VinceEmigh的相同问答可能的副本。不是,这是一个不同的用例。扩展函数被编译成静态方法,如链接副本中所述。这就是答案。如果您正在寻找一个工作环境,请指定它。正如这篇文章目前的情况,问题和答案都与副本相匹配(不管细节如何,类似于NPE问题)。回答只有细微差别的问题是一种浪费,没有任何真正的差别,因为它不会增加价值,只会增加相同的问答