Google Guice 和 Lombok - @AllArgsConstructor(onConstructor = @__(@Inject)) 抽象 class

Google Guice and Lombok - @AllArgsConstructor(onConstructor = @__(@Inject)) for abstract class

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

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

    // ...
}

对于 abstract class,我可以使用 @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;
    }
}

是否可以使用 @AllArgsConstructor(onConstructor = @__(@Inject)) 之类的方法将构造函数代码保存在 ChildClass 中?

不行,由于Lombok的限制,不能在子class中定义AllArgsConstructor,当有父构造函数时(见此issue on GitHub and another answer on SO)。

您可以混合 field/setter 父级注入和子级构造函数注入,但我建议避免这种情况。