Java 9 中 Publisher 接口的规则是什么?
**发布者**是按订阅者收到的需求发布无限数量的顺序元素的提供者。**Publisher<T>** 接口负责发布类型为 **T** 的元素,并提供 **subscribe()** 方法供订阅者连接到它。
public interface Publisher<T> { public void subscribe(Subscriber<? super T> s); }
Publisher 接口规则
- **Publisher** 向 **Subscriber** 发出的 **onNext()** 方法总数必须始终小于或等于 Subscriber 的 **Subscription** 请求的元素总数。
- **Publisher** 可以发出比请求的 **onNext()** 方法更少的数量,并通过调用 **onComplete()** 或 **onError()** 方法终止 **Subscription**。
- 向 **Subscriber** 发出的 **onSubscribe()**、**onNext()**、**onError()** 和 **onComplete()** 方法必须按顺序发出。
- 如果 Publisher 失败,则必须发出 **onError()** 方法。
- 如果 Publisher 成功终止,则必须发出 **onComplete()** 方法。
- 如果 Publisher 向 **Subscriber** 发出 **onError()** 或 **onComplete()** 方法,则 Subscriber 的 Subscription 必须被取消。
- 一旦发出终止状态(**onError()**、**onComplete()**),则不允许发生任何进一步的信号。
- 如果 Subscription 被取消,则其 Subscriber 必须停止接收信号。
- **Publisher.subscribe()** 方法必须在向该 **Subscriber** 发出任何其他信号之前,对提供的 Subscriber 调用 **onSubscribe()** 方法,并在正常情况下返回,除非提供的 Subscriber 为 null。在这种情况下,它必须向调用者抛出 **NullPointerException**。
- **Publisher.subscribe()** 方法可以根据需要调用任意次数,每次使用不同的 Subscriber。
- **Publisher** 可以支持多个 Subscriber,并决定每个 Subscription 可以是 **单播** 还是 **多播**。
广告