gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:39:32 25 4
gpt4 key购买 nike

我有 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com