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 父级注入和子级构造函数注入,但我建议避免这种情况。
我发现 @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 父级注入和子级构造函数注入,但我建议避免这种情况。