Я новичок в ReactiveX. Я изучал это из чтения исходного кода. Все было так ясно, но внезапно я получил это слово под названием «Потребитель», которое было Интерфейсом. Он был использован вместо Обозревателя.
Может кто-нибудь дать мне знать, что именно он делает?
Я перешел по нескольким ссылкам, но все они сказали, что только одно утверждение Потребитель - это функциональный интерфейс (обратный вызов), который принимает одно значение.
Я хочу знать точную работу этого.
- Что это такое?
- Зачем нам это нужно?
- Как вы используете его?
- Это займет место Наблюдателя? Если ДА, как и почему?
3 ответа
Consumer - это простой интерфейс Java, который принимает переменная типа T. Как вы сказали, она используется для обратных вызовов.
Примере:
import io.reactivex.functions.Consumer;
Flowable.just("Hello world").subscribe(new Consumer<String>() {
@Override public void accept(String s) {
System.out.println(s);
}
});
Почему это работает? Как мы можем использовать Потребителя вместо Наблюдателя?
RxJava просто создает Observer, передает ему Consumer и вызывается в onNext
< Сильный > Обновление
LambdaObserver
является своего рода наблюдателем, который создается из четырех функциональных интерфейсов и использует их в качестве обратных вызовов. В основном это для использования java 8 лямбда-выражений. Это выглядит так:
Observable.just(new Object())
.subscribe(
o -> processOnNext(o),
throwable -> processError(throwable),
() -> processCompletion(),
disposable -> processSubscription()
);
Consumer
использует значения, которые вы получаете при подписке. Это как Subscriber
, который передает отправленные данные как обратный вызов.
Consumer
- это простой интерфейс, который имеет обратный вызов для универсального типа и необходим для получения испущенных элементов Observable
.
Будьте внимательны, если у вас есть только потребитель, который не улавливает ошибки и у вас могут возникнуть проблемы при отладке.
Вы можете решить это, используя другого Потребителя в качестве второго параметра, который получает Throwable.
Flowable.just("Hello world")
.subscribe(
emittedData -> System.out.println(emittedData), // onNext
throwable -> throwable.printStackTrace() // onError
);
По моему скромному мнению, потребитель предназначен для обратных / двунаправленных потоков.
Например, ваш источник данных выдает «Y» сложных зависящих от времени операций, выполняемых из параметра «X» в форме «горячей» текучести (HF).
Предположим, что параметр X излучается через «горячую» наблюдаемую (HO), поэтому ваш источник данных может быть потребителем, который подписывается на «HO» и выдает результат сложных операций через HF.
В этом случае у вас есть двунаправленный поток, и вы использовали потребителя, чтобы протолкнуть дату, предоставленную через HO в источнике данных.
Я не уверен, что мой ответ действительно правильный ... RX немного сложнее: B
Похожие вопросы
Новые вопросы
android
Android - это мобильная операционная система Google, используемая для программирования или разработки цифровых устройств (смартфоны, планшеты, автомобили, телевизоры, одежда, стекло, IoT). Для тем, связанных с Android, используйте специальные теги Android, такие как android-intent, android-activity, android-адаптер и т. Д. Для вопросов, не связанных с разработкой или программированием, но связанных с платформой Android, используйте эту ссылку: https: // android.stackexchange.com .