RxBus: отправка общих событий
У меня есть общий Event
класс, который я хочу опубликовать на PublishRelay
это действует как мой автобус.
Я хочу сделать мой RxBus
отправлять события общего типа, но сама шина не является общей. Можете ли вы дать мне идеи о том, что мне нужно изменить?
public class Event<T> {
protected String name;
protected Pair<String, T> event;
public String getName() {
return event.first;
}
public T getData() {
return event.second; //cast to type
}
public Event(String name, T data) {
event = Pair.create(name, data);
}
}
@Singleton
public class RxBus {
// I want to post Event<T>
private final PublishRelay<Event<User>> busSubject = PublishRelay.create();
public PublishRelay<Event<User>> bus() {
return busSubject;
}
public void post(Event<User> event) {
busSubject.accept(event);
}
}
1 ответ
Если вы хотите использовать общие события, вы можете просто использовать ?
подстановочный знак для определения этого. Но тогда у вас нет информации о фактическом типе T
в подписчике. Вы бы справились с этим по-другому. Может быть, фильтр или приведение. Также может быть нехорошо сделать PublishRelay
доступны снаружи. возврате Observable
скрыл бы эту деталь реализации.
@Singleton
public class RxBus {
private final PublishRelay<Event<?>> busSubject = PublishRelay.create();
public Observable<Event<?>> bus() {
return busSubject;
}
public void post(Event<?> event) {
busSubject.accept(event);
}
}