基础科目

RxJava 中的 Subject 是一个既是 Observable 又是 Observer 的类。这基本上意味着它可以充当 Observable 并将输入传递给订阅者,并作为 Observer 从另一个 Observable 获取输入。

Subject<String, String> subject = PublishSubject.create(); 
subject.subscribe(System.out::print);
subject.onNext("Hello, World!"); 

以上打印 Hello World! 使用 Subjects 控制台。

说明

  1. 第一行代码定义了 PublishSubject 类型的新 Subject

    Subject<String, String> subject = PublishSubject.create();
        |     |       |       |                 |
     subject<input, output>  name   = default publish subject
    
  2. 第二行订阅了主题,显示了 Observer 的行为。

    subject.subscribe(System.out::print);
    

    这使得 Subject 能够像普通用户那样接收输入

  3. 第三行调用了主题的 onNext 方法,显示了 Observable 的行为。

    subject.onNext("Hello, World!"); 
    

    这使得 Subject 可以为所有订阅者提供输入。

类型

Subject(在 RxJava 中)可以是以下四种类型中的任何一种:

  • AsyncSubject
  • BehaviorSubject
  • PublishSubject
  • ReplaySubject

此外,Subject 可以是 SerializedSubject 型。此类型确保 Subject 不违反 Observable Contract (指定所有调用必须序列化)

进一步阅读: