假设我有这样的东西
界面
Interface IsInterface {}
实现类
public ConcreteClassA implements IsInterface {
InjectorA a, InjectorB c, InjectorC c;
@Inject
ConcreteClassA(InjectorA a, InjectorB b, InjectorC c) {
this.a = a;
this.b = b;
.....
}
}
public ConcreteClassB implements IsInterface {
InjectorA a, InjectorB B, InjectorC C;
@Inject
ConcreteClassB(InjectorA a, InjectorB b, InjectorC c) {
this.a = a;
this.b = b;
.....
}
}
..然后我决定在我的 GWT module.gwt.xml 中使用 GWT 延迟绑定
//Pseudo XML Configuration
if (type is IsInterface)
if toggle == A then use ConcreteClass A else use ConcreteClassB
现在,当我尝试运行它时。它不起作用,因为 GWT 期望我的具体类 A 和 B 具有默认的 0 构造函数。所以,我在我的具体课程上尝试了以下内容
@Inject
InjectorA a;
@Inject
InjectorB b;
@Inject
InjectorC c;
ConcreteClassA() {
}
它绕过了 0 构造函数错误,但是当我尝试使用 a、b 或 c 时,它给了我 NullPointerException。使其工作的一种方法是删除 @Inject 并像这样使用 GWT.create()
InjectorA a, InjectorB b, InjectorC c;
ConcreteClassA() {
this.a = GWT.create(InjectorA.class);
.....
.....
}
这会起作用,但是如果我的 InjectorA、InjectorB 和 InjectorC 没有 0 构造函数并且严重依赖@inject 怎么办。我不想遍历所有类来创建 0 个构造函数并用 GWT.create() 替换 @inject。必须有更好的方法来做到这一点。我在这里错过了什么吗?