在 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
.
说明 - 我认为这是不可能的,因为这意味着您要扩展抽象的 Observable
class。 Kotlin 扩展通过移出继承树来添加相同的功能,在 Java 中你几乎被继承困住了。
所以剩下的唯一选择是扩展基础 Observable
class 并创建您自己的实现,我认为这在您的情况下是不需要的。
一个简单的解决方案是为 Java 创建一个新方法,它可以接受一个可观察对象并执行所需的逻辑。或者创建一个自定义的 class 并将 Observable
实例作为其实例成员,然后在其中编写所需的方法(标准的 OOPS 方式)。然后可以从 Kotlin 以及 Java.
使用此代码
编辑: 我相信您已经知道这一点,但仍会向您指出这一点 。
扩展功能是 kotlin 优于 Java 的优势之一。使用 kotlin 编码可为您提供这些优势,但不幸的是,这并不意味着您可以在 Java 代码中拥有 kotlin 语言功能。
解决方案:将您希望使用扩展函数的模块移植到 kotlin。
我创建了一个扩展函数,
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
.
说明 - 我认为这是不可能的,因为这意味着您要扩展抽象的 Observable
class。 Kotlin 扩展通过移出继承树来添加相同的功能,在 Java 中你几乎被继承困住了。
所以剩下的唯一选择是扩展基础 Observable
class 并创建您自己的实现,我认为这在您的情况下是不需要的。
一个简单的解决方案是为 Java 创建一个新方法,它可以接受一个可观察对象并执行所需的逻辑。或者创建一个自定义的 class 并将 Observable
实例作为其实例成员,然后在其中编写所需的方法(标准的 OOPS 方式)。然后可以从 Kotlin 以及 Java.
编辑: 我相信您已经知道这一点,但仍会向您指出这一点
扩展功能是 kotlin 优于 Java 的优势之一。使用 kotlin 编码可为您提供这些优势,但不幸的是,这并不意味着您可以在 Java 代码中拥有 kotlin 语言功能。
解决方案:将您希望使用扩展函数的模块移植到 kotlin。