java - 使用 Roboguice 和 RxJava 进行继承和依赖注入(inject)

标签 java inheritance rx-java roboguice

我有 1 个基类和 2 个派生类。我将尝试用一个非常简化的版本来解释:

public class AllIntegers{
    List<Integer> myList;
    BehaviorSubjec<Integer> behaviorSubject;
    @Inject
    public AllIntegers(List<Integers> allIntegers) {
       behaviorSubject = BehaviorSubject.create();
       //some logic
    }
    public BehaviorSubject<Integer> getAllIntegersBSAsObservable() {
      return this.behaviorSubject.asObservable();
    }
}


public class OddIntegers extends AllIntegers {
    List<Integer> myList;

    @Inject
    public OddIntegers(... some dependencies...) {
       /* ... some logic ... */
       //Getting observable from parent
       getAllIntegersBSAsObservable.subscribe(new Subscriber(...));
    }
}

public class EventIntegers extends AllIntegers {
    List<Integer> myList;

    @Inject
    public EventIntegers(... some dependencies...) {
       /* ... some logic ... */
       //Getting observable from parent
       getAllIntegersBSAsObservable.subscribe(new Subscriber(...));
    }
}

我的 Roboguice 模块文件如下所示:

bind(IAllIntegers.class).to(AllIntegers.class).in(Scopes.SINGLETON);
bind(IOddIntegers.class).to(OddIntegers.class).in(Scopes.SINGLETON);
bind(IEventIntegers.class).to(EventIntegers.class).in(Scopes.SINGLETON);

再次,我在这里进行了过度简化,以便更容易编写和理解。

问题在于 Roboguice 按其应有的方式创建了 AllIntegers.class 的实例。然而,我必须向 AllIntegers.class 添加一个空构造函数,以便编译器不会提示,这当然会导致 OddIntegers 和 EventIntegers 每个都获得自己的 AllIntegers 实例,因此两个子级都会获得不同的可观察实例,而单例基类也获得自己的实例(这是我真正想要的),因此当我在行为主题上触发 onNext 时, children 不会使用react,因为行为主题不同。

我应该使用组合而不是继承吗?

最佳答案

我不认为 Roboguice 是问题所在,这是标准行为。您正在调用实例方法 getAllIntegersBSAsObservable,该方法返回 this.behaviorSubject.asObservable(); 实例字段。尽管所有实例都是单例,但它们仍然是单独的实例,因此它们每个都有自己的 behaviorSubject 实例。

<小时/>

一个可能的修复方法是使 behaviorSubject 成为 static 字段。

关于java - 使用 Roboguice 和 RxJava 进行继承和依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36960378/

相关文章:

java - 主线程中的SubscribeOn和observeOn

android - 如果只有一个 Observable 参数存在,如何使用 RxJava Observable.zip

java - Apache Lucene - S3 目录

java - 在 Android + OpenCV 上删除 HoughLinesP 之后的重复行

java - 如何更改weblogic 12c中的jdk版本

c# - 使用 Moq-Mock 库时发现不明确的匹配异常

java - SQLException : No suitable driver found for org. sqlite.JDBC

python - 表示子类类似于具有一个对象的父类(super class)的结构的最佳方式

c++ - 重载 << 运算符和继承类

android - Observable android 理解