基礎科目

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 (指定所有呼叫必須序列化)

進一步閱讀: