如何创建使用 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));