如何创建使用 guice 工厂辅助注入创建并从抽象 class 扩展的 class 实例?
How to create instance of a class which is created using guice factory assisted inject and is extended from an abstract class?
我有以下层次结构:
~interface Car
~ abstract class SportsCar
~ class Ferrari
我使用 FerrariFactory 创建了一个 class Ferrari 的实例(模块中的代码如下所示):
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 的 superclass 构造函数的调用:
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 访问任何东西(空指针的奇怪情况)。
关于这是否是绑定问题或为什么我的抽象class 构造函数无法设置部分的任何建议?
好的。找到了答案。我错过了两件事:
1.遗漏了 Ferrari 构造函数中的 @Assisted 注解:
@Inject
public Ferrari(@Assisted Element parts) {
super(parts);
....
}
2。我可以在模块中声明抽象class和实现如下:
install(new FactoryModuleBuilder().implement(SportsCar.class,Ferrari.class).build(FerrariFactory.class));
我有以下层次结构:
~interface Car
~ abstract class SportsCar
~ class Ferrari
我使用 FerrariFactory 创建了一个 class Ferrari 的实例(模块中的代码如下所示):
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 的 superclass 构造函数的调用:
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 访问任何东西(空指针的奇怪情况)。
关于这是否是绑定问题或为什么我的抽象class 构造函数无法设置部分的任何建议?
好的。找到了答案。我错过了两件事:
1.遗漏了 Ferrari 构造函数中的 @Assisted 注解:
@Inject
public Ferrari(@Assisted Element parts) {
super(parts);
....
}
2。我可以在模块中声明抽象class和实现如下:
install(new FactoryModuleBuilder().implement(SportsCar.class,Ferrari.class).build(FerrariFactory.class));