Java 9 中 Subscriber 介面的規則是什麼?
**Subscriber** 介面訂閱釋出者以透過 **onNext()** 方法接收專案,透過 **onError()** 方法接收錯誤訊息,或透過 **onComplete()** 方法接收不再期望專案的訊號。在任何這些事情發生之前,釋出者都會呼叫 **onSubscription()** 方法。
public interface Subscriber<T> { public void onSubscribe(Subscription s); public void onNext(T t); public void onError(Throwable t); public void onComplete(); }
Subscriber 介面規則
- **Subscriber** 必須透過 **Subscription.request(long n)** 方法來接收 **onNext()** 訊號。
- **Subscriber.onComplete()** 和 **Subscriber.onError(Throwable t)** 方法不得呼叫 Subscription 或 Publisher 上的任何方法。
- 在接收到訊號後,**Subscriber.onComplete()** 和 **Subscriber.onError(Throwable t)** 方法必須認為 Subscription 已取消。
- 如果 Subscriber 已經有一個活動的 Subscription,則必須在 **onSubscribe()** 訊號後對給定的 Subscription 呼叫 **Subscription.cancel()** 方法。
- 如果不再需要 Subscription,Subscriber 必須呼叫 **Subscription.cancel()** 方法。
- Subscriber 確保對其 Subscription 的 request 和 cancel 方法的所有呼叫都是序列執行的。
- 如果仍有請求的元素待處理,則 Subscriber 必須在呼叫 **Subscription.cancel()** 方法後接收一個或多個 **onNext()** 訊號。此方法不能保證立即執行底層清理操作。
- Subscriber 必須接收 **onComplete()** 訊號,無論是否在之前呼叫過 **Subscription.request(long n)**。
- Subscriber 必須接收 **onError()** 訊號,無論是否在之前呼叫過 **Subscription.request(long n)**。
- Subscriber 必須確保所有對其訊號方法的呼叫都在相應訊號處理之前發生。這意味著 Subscriber 必須注意將其訊號正確釋出到其處理邏輯。
- 對於給定的 Subscriber,**Subscriber.onSubscribe()** 必須最多呼叫一次。
- 呼叫 **onSubscribe()**、**onNext()**、**onError()** 或 **onComplete()** 方法必須返回結果,除非任何提供的引數為 null,在這種情況下,它必須向呼叫者丟擲 **NullPointerException**。
廣告