#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