Я создал функцию расширения,
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.
EDIT: Я думаю, вы уже знаете это, но все равно укажете вам на этот вопрос .
Расширение функции одно из преимуществ kotlin над Java. Кодирование в kotlin дает вам эти преимущества, но, к сожалению, это не значит, что вы можете использовать функции языка kotlin в Java-коде.
Решение: выгрузите модуль, где вы хотите использовать функции расширения в kotlin.