Я начал изучать реактивные потоки, потому что мне было интересно узнать об этой новой тенденции использования RxJava в качестве замены более традиционных шин событий. Этот пост в блоге представляет собой типичное описание того, как готово. Если я правильно понимаю, RxJava 1.x не была строго реализацией Reactive Streams, но была очень похожа. Версия 2.0 включает в себя некоторые классы, которые совместимы или, по крайней мере, проходят TCK, поэтому обновленная версия этого кода может выглядеть немного иначе.
public class UserLocationModel {
private PublishSubject<LatLng> subject = PublishSubject.create();
public void setLocation(LatLng latLng) {
subject.onNext(latLng);
}
public Observable<LatLng> getUserLocation() {
return subject;
}
}
В терминологии Reactive Streams я думаю, что subject
— это Processor
, что является и Publisher
, и Subscriber
.
Проблема в том, что вызов onNext
на Subscriber
, который ни на что не подписан, может нарушить спецификацию Reactive Streams, в частности правило 1.9.
Это просто деталь реализации, что это вообще работает? Правильно ли я думаю, что вы не можете в целом полагаться на эту работу с совместимой реализацией Reactive Streams?