【问题标题】:How to use void Subject in RxJava2?如何在 RxJava2 中使用 void Subject?
【发布时间】:2017-08-30 09:32:59
【问题描述】:

我已经设法以这种方式创建它:

private final PublishSubject<Void> subject = PublishSubject.create();

但是如何在onNext(T t) 中将值传递给它?我不能将 null 传递给它,因为它会引发异常。 onComplete 也不是一个选项。

【问题讨论】:

    标签: java android rx-java2 subject


    【解决方案1】:

    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);
    

    【讨论】:

    • 感谢您的回答。我只是想也许框架中有一些内置的类es,我可以使用。我认为将此功能添加到框架中是个好主意。
    • 我们没有为任何人的业务对象内置类型,否则想象一下您会受到我们的 RxUser 对象没有特定字段或结构的限制......
    【解决方案2】:

    Kotlin 中,您可以使用 Unit:

    val source = PublishSubject.create<Unit>()
    
    source.onNext(Unit)
    

    【讨论】:

    • 你不能将null传递给onNext,我猜最好使用Unit类型——相当于Java中的void
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多