RxJava2 не удалось найти Func0

#android #rx-java

#Android #rx-java

Вопрос:

RxJava 2 почти выпущен, и я хочу перейти с RX 1.2.0 на 2.0.0, но я заметил, что в RxJava 2 нет интерфейса Func0.

Что разработчики должны использовать вместо Func0 в RxJava 2?

Ответ №1:

RxJava2 использует вызываемый интерфейс из JDK (https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Callable.html )

Пример с наблюдаемым.отложить (http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Observable.html#defer (java.util.concurrent.Вызываемый))

 Observable.defer(new Callable<ObservableSource<MyObject>>() {
    @Override
    public ObservableSource<MyObject> call() throws Exception {
        return Observable.just(new MyObject());
    }
});
  

Ответ №2:

Из их разработки о том, что изменилось между RxJava 1.x и 2.x:

Мы следовали соглашению об именовании Java 8, определив io.reactivex.functions.Function и io.reactivex.functions.BiFunction , а также переименовав Func3 Func9 в Function3 Function9 соответственно. FuncN Заменяется объявлением Function<Object[], R> типа.

Кроме того, операторы, требующие предиката, больше не используются Func1<T,
Boolean>
, но имеют отдельный, возвращающий примитивный тип Predicate<T> (позволяет лучше встраивать из-за отсутствия автоматической упаковки).

Класс io.reactivex.functions.Functions утилиты предлагает общие источники функций и преобразования в Function<Object[], R> .

Комментарии:

1. Но io.reactivex.functions.Function есть rx.functions.Func1 и io.reactivex.functions.BiFunction есть rx.functions.Func2 , поэтому нет эквивалента Func0?

Ответ №3:

RxJava2 использует java.util.concurrent.Callable java7 вместо Func0