【发布时间】:2017-08-30 09:32:59
【问题描述】:
我已经设法以这种方式创建它:
private final PublishSubject<Void> subject = PublishSubject.create();
但是如何在onNext(T t) 中将值传递给它?我不能将 null 传递给它,因为它会引发异常。 onComplete 也不是一个选项。
【问题讨论】:
标签: java android rx-java2 subject
我已经设法以这种方式创建它:
private final PublishSubject<Void> subject = PublishSubject.create();
但是如何在onNext(T t) 中将值传递给它?我不能将 null 传递给它,因为它会引发异常。 onComplete 也不是一个选项。
【问题讨论】:
标签: java android rx-java2 subject
2.x 中通常不允许空值,因此与 1.x 不同,Void 类型不会让您发出任何 onNext(null)。如果你认为你需要Void 作为你的元素类型,这表明你并不关心什么元素只是你想一遍又一遍地对某事做出反应。
对于这种情况,您可以改用任何其他类型并发出任何值的信号。在wiki 中有一个可以改编的例子:
enum Irrelevant { INSTANCE; }
PublishSubject<Irrelevant > source = PublishSubject.create();
source.subscribe(e -> { /* Ignored. */ }, Throwable::printStackTrace);
source.onNext(Irrelevant.INSTANCE);
source.onNext(Irrelevant.INSTANCE);
【讨论】:
RxUser 对象没有特定字段或结构的限制......
在 Kotlin 中,您可以使用 Unit:
val source = PublishSubject.create<Unit>()
source.onNext(Unit)
【讨论】:
onNext,我猜最好使用Unit类型——相当于Java中的void