0

我有一个通用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);
  }
}
4

1 回答 1

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);
  }
}
于 2017-06-12T15:16:07.173 回答