Как использовать void Subject в RxJava2?
Мне удалось создать это так:
private final PublishSubject<Void> subject = PublishSubject.create();
Но как передать ему значение в onNext(T t)
? Я не могу передать ему значение null, потому что он выдаст исключение. onComplete
тоже не вариант.
1 ответ
Решение
В 2.x, как правило, пустые значения не допускаются. Void
Тип не позволит вам излучать какие-либо onNext(null)
в отличие от 1.x. Если вы думаете, что вам нужно Void
как тип вашего элемента, это означает, что вы не заботитесь о том, какие элементы вы просто хотите отреагировать на что-то снова и снова.
В этом случае вы можете использовать любой другой тип и указать любое значение. В вики есть пример, который вы можете адаптировать:
enum Irrelevant { INSTANCE; }
PublishSubject<Irrelevant > source = PublishSubject.create();
source.subscribe(e -> { /* Ignored. */ }, Throwable::printStackTrace);
source.onNext(Irrelevant.INSTANCE);
source.onNext(Irrelevant.INSTANCE);
В Kotlin вы можете использовать любой объект:
val source = PublishSubject.create<Unit>()
source.onNext(Unit)