首页 > 解决方案 > Google Guice 和 Lombok - 抽象类的 @AllArgsConstructor(onConstructor = @__(@Inject))

问题描述

我发现@AllArgsConstructor(onConstructor = @__(@Inject))在使用 Google Guice 时保持代码整洁很有帮助。我可以保存构造函数代码。例如:

@AllArgsConstructor(onConstructor = @__(@Inject))
public class SomeClass {
    private final DependentClassOne classOne;
    private final DependentClassTwo classTwo;

    // ...
}

对于abstract类,我可以@Inject用于构造函数。

@AllArgsConstructor(onConstructor = @__(@Inject))
public abstract class AbstractParentClass {
    private final DependentClassOne classOne;
}

public class ChildClass extends AbstractParentClass {
    private final DependentClassTwo classTwo;

    @Inject
    public ChildClass(final DependentClassOne classOne, final DependentClassTwo classTwo) {
        super(classOne);
        this.classTwo = classTwo;
    }
}

ChildClass是否可以通过使用类似的东西来保存构造函数代码@AllArgsConstructor(onConstructor = @__(@Inject))

标签: javaguicelombok

解决方案


AllArgsConstructor不,由于 Lombok 的限制,当存在父构造函数时,无法在子类中定义(请参阅GitHub 上的这个问题和SO上的另一个答案)。

您可以将父项中的字段/设置器注入与子项中的构造函数注入混合,但我建议避免使用它。


推荐阅读