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**。

更新于:2020年4月21日

324 次浏览

启动您的职业生涯

通过完成课程获得认证

开始学习
广告