java - 自动生成包含泛型类型的构建器模式
问题描述
一个命令由一个 Builder 实例化,当设置值时,将它们包装在一个 Undefined 对象中(然后在执行方法中使用它来设置书名,前提是已经设置了 newTitle)。
命令类:
public class UpdateBookCommand {
Book book;
Undefined<String> newTitle;
public Book execute(){
if(newTitle.isDefined())
this.book.setTitle(this.newTitle.get());
return this.book;
}
public static class Builder {
Book book;
Undefined<String> newTitle = Undefined.instance();
public Builder(Book book) {
this.book=book;
}
public Builder newTitle(String newTitle){
this.newTitle=Undefined.of(newTitle);
}
public UpdateBookCommand build() {
UpdateBookCommand command = new UpdateBookCommand();
command.newTitle=this.newTitle;
return command;
}
}
}
这种模式效果很好,我打算将它用于我的所有命令,但需要大量样板代码,我想使用 Lombok@Builder
或 FreeBuilder 或任何其他代码生成工具自动生成这些代码,但我找不到如何自动生成 Undefined包装。
两种工具都会生成
public Builder newTitle(Undefined<String> newTitle)){
this.newTitle=newTitle;
}
代替
public Builder newTitle(String newTitle){
this.newTitle=Undefined.of(newTitle);
}
有没有办法更改由@Builder
或@Freebuilder
注释生成的代码模板,或者我可以使用的任何其他工具?
解决方案
您可以使用 Lombok's@Builder
并自定义不符合您需求的部分。Lombok 会默默地忽略构建器类中已经存在的任何内容,而其他所有内容都将照常生成。
在您的示例中,如下所示:
@Builder
public class UpdateBookCommand {
Book book;
Undefined<String> newTitle;
public static class UpdateBookCommandBuilder {
public Builder newTitle(String newTitle) {
this.newTitle=Undefined.of(newTitle);
}
}
// Your methods here.
}
推荐阅读
- python - Django表单字段不呈现
- java - 查找数组中的最大整数,在 Java 中具有指定的开始和结束索引,**递归**
- linux - 在makefile中更改PATH
- python-3.x - 在 Pytorch 内置的自定义 Batchnorm 中更新 running_mean 和 running_var 有问题吗?
- c#-4.0 - 这个 Entity Framework Core 异常是什么意思?
- r - 如何扩展您的绘图,以便可以看到所有标签而不会在 R 中重叠
- python - 链接:致命错误 LNK1104:无法使用 CMake 查找库打开文件“python38.lib”
- excel - Excel 中的“ActiveX 组件无法创建对象”错误
- angular - 当状态由ngrx-forms管理时,如何以角度动态地将formgroup控件添加到formarray?
- python - Selenium 似乎无法在页面上找到文本