我有以下的hirarchy:
~interface Car
~ abstract class SportsCar
~ class Ferrari
我使用FerrariFactory创建了一个类法拉利的实例(模块中的代码如下所示):
install(new FactoryModuleBuilder().build(FerrariFactory.class));
FerrariFactory界面有以下方法,我使用辅助注射来注射零件(这是包含所有零件的xml元件,即法拉利特定零件+跑车零件):
Ferrari create(@Assisted Element partsElement);
当我创建法拉利实例时,我使用以下内容:
ferrariFactory.create(partsElement);
首先调用法拉利构造函数:
@Inject
public Ferrari(Element parts) {
super(parts);
this.ferrariRadio= getElementValue(parts, "Parts/FerrariParts/ferrariRadio");
}
由于第一行是对SportsCar的超类构造函数的调用:
public SportsCar (Element parts) {
super();
System.out.println("SportsCarconstructor: 1");
System.out.println("SportsCarconstructor: 2 "+parts);
...
... // where I set the basic parts from the parts xml element
}
由于SportsCar是一个摘要,我在guice模块中没有约束力。我不知道如何绑定它。另外,我在SportsCar构造函数的第二个sysout行得到一个NullPointerException,即使我没有通过null访问任何东西(奇怪的空指针)。
关于它是否是绑定问题或为什么我的abstractclass构造函数无法设置部件的任何建议?
答案 0 :(得分:0)
确定。找到了答案。我错过了两件事:
<强> 1。错过了法拉利构造函数中的@Assisted注释:
@Inject
public Ferrari(@Assisted Element parts) {
super(parts);
....
}
<强> 2。我可以在模块中声明抽象类和实现,如下所示:
install(new FactoryModuleBuilder().implement(SportsCar.class,Ferrari.class).build(FerrariFactory.class));