在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。