假设我有类似的东西
接口
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期望我的Concrete Class 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。必须有更好的方法来做到这一点。我在这里错过了什么吗?
答案 0 :(得分:0)
找到了解决方案
interface IsInterface {
@Inject
void init(InjectorA a, InjectorB b, ...);
}
public ConcreteClassA implements IsInterface {
InjectorA a, InjectorB c, InjectorC c;
ConcreteClassA() {}
@Override
public void init(InjectorA a, InjectorB b, ..) {
this.a = a;
this.b = b;
....
}
}