sid*_*dss 22 java guice lombok
Lombok在自动生成构造函数时错过了field的注释.有没有办法在构造函数输入参数中保留字段的注释?
生成构造函数的类,
@RequiredArgsConstructor(onConstructor = @__(@Inject))
public class Test {
@Named("MyField")
private final String field;
@Named("MyHandler")
private final SomeHandler handler;
}
Run Code Online (Sandbox Code Playgroud)
生成的类:
public class Test {
@Named("MyField")
private final String field;
@Named("MyField")
private final SomeHandler handler;
@Inject
public Test(final String field, final SomeHandler handler) {
this.field = field;
this.handler = handler;
}
}
Run Code Online (Sandbox Code Playgroud)
期望的课程:
public class Test {
@Named("MyField")
private final String field;
@Named("MyHandler")
private final SomeHandler handler;
@Inject
public Test(@Named("MyField")final String field,
@Named("MyHandler")final SomeHandler handler) {
this.field = field;
this.handler = handler;
}
}
Run Code Online (Sandbox Code Playgroud)
maa*_*nus 10
没有这样的功能,看起来没有人关心.我提出过一次并开始实施它,但放弃了(没有需求和太多的工作).
它可能看起来像
@RequiredArgsConstructor(onConstructor=@__(@Inject))
public class Something {
@OnConstructor(@Named("userName"))
private final String userName;
@OnConstructor(@Named("userPassword"))
private final String userPassword;
private final int anotherField;
private final int yetAnotherField;
}
Run Code Online (Sandbox Code Playgroud)
或者只是
@RequiredArgsConstructor(
onConstructor=@__(@Inject),
moveToConstructorArg=@__(@Named))
public class Something {
@Named("userName")
private final String userName;
@Named("userPassword")
private final String userPassword;
private final int anotherField;
private final int yetAnotherField;
}
Run Code Online (Sandbox Code Playgroud)
或者可以使用它来控制,lombok.config因为您可能希望将所有@Named注释移动到构造函数中.
我担心,如果你想要它,那么你必须自己做(我的不完整的实现可能会帮助你一点).
FTR:现在有一个功能请求.
在版本v1.18.4中, Lombok添加了对复制特定注释的支持。意思是,如果您将以下设置设置为lombok.config:
lombok.copyableAnnotations += com.google.inject.name.Named
Run Code Online (Sandbox Code Playgroud)
并将以下Lombok注释应用于您的班级:
@RequiredArgsConstructor(onConstructor = @__(@Inject))
public class Hello {
@NonNull @Named("my-name") String name;
}
Run Code Online (Sandbox Code Playgroud)
该@Named注释应该被复制到您的生成构造函数的参数。
| 归档时间: |
|
| 查看次数: |
3263 次 |
| 最近记录: |