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

Call extension function inside java class as any RX operator

我创建了一个扩展函数,

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

在 kotlin class 中,我将能够以这种方式使用它没问题

observable.subscribeWithErrorHandling(...)

现在,我也想在 java class 中使用这个功能。 我已经看到您可以像这样静态地调用它:

MyExtensionFile.subscribeWithErrorHandling

但就我而言,您还需要其他东西,因为它是 RX 流程的中间部分。这就是我坚持的部分。这甚至可能吗?或者无法通过 java 代码执行类似的操作?

简单的回答。 No.

说明 - 我认为这是不可能的,因为这意味着您要扩展抽象的 Observableclass。 Kotlin 扩展通过移出继承树来添加相同的功能,在 Java 中你几乎被继承困住了。

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

使用此代码

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

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

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