Roboguice和RxJava的继承和依赖注入

Roboguice和RxJava的继承和依赖注入,java,inheritance,rx-java,roboguice,Java,Inheritance,Rx Java,Roboguice,我有一个基类和两个派生类。我将尝试用一个非常简化的版本来解释: public class AllIntegers{ List<Integer> myList; BehaviorSubjec<Integer> behaviorSubject; @Inject public AllIntegers(List<Integers> allIntegers) { behaviorSubject = BehaviorSubje

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

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创建了AllIntegers.class的一个实例。然而,我必须为AllIntegers.class添加一个空构造函数,以使编译器不会抱怨,这当然会导致OddInteger和EventInteger各自获得自己的AllIntegers实例,因此两个子类都获得不同的observable实例,而singleton基类也获得自己的实例(这是我真正想要的),因此,当我在行为主体上使用onNext时,孩子们不会做出反应,因为行为主体是不同的


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

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



一个可能的解决方法是将
行为主体
设为
静态
字段。

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



一个可能的解决方法是将
行为主体
设置为
静态
字段。

您是对的,这不是机器人导航问题,事实上,除了我的设计之外,这不是任何问题。我编写的单例、依赖注入和继承的组合引入了这个问题。我喜欢你将行为主体标记为静态域的解决方案,尽管它看起来仍然像是我介绍的问题的创可贴解决方案。我想我得去喝点咖啡,重新考虑一下。你是对的,这不是机器人导航的问题,事实上,除了我的设计之外,这不是任何问题。我编写的单例、依赖注入和继承的组合引入了这个问题。我喜欢你将行为主体标记为静态域的解决方案,尽管它看起来仍然像是我介绍的问题的创可贴解决方案。我想我得去喝点咖啡,重新考虑一下
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);