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

时间:2017-09-11 04:41:53

标签: java android kotlin rx-java kotlin-android-extensions

我创建了一个扩展函数,

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

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

observable.subscribeWithErrorHandling(...)

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

MyExtensionFile.subscribeWithErrorHandling

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

2 个答案:

答案 0 :(得分:0)

简单的回答。 No

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

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

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

答案 1 :(得分:0)

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

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