java - 如何为 lombok 编写自定义 build() 函数,用于具有单一注释的集合数据类型?
问题描述
@ToString
@EqualsAndHashCode
@Getter
@Builder(builderClassName = "Builder")
public class elements{
@Singular("item")
private final Set<int> items;
private final int b;
public static final class Builder {
public elements build(){
return new elements(items, b);
}
}
}
构造函数在没有单数注释时工作,但是当我在集合上有单数注释时,构造函数说它不可用。
Java.util.set 不能是 Java.util.ArrayList
那么,调用此构造函数的正确方法是什么?
解决方案
使用 时@Singular
,build()
lombok 生成的方法变得相当复杂(生成的构建器的其他部分也是如此)。这是 lombok 默认生成的内容(从示例的 delombok 输出中提取):
public Elements build() {
java.util.Set<Integer> items;
switch (this.items == null ? 0 : this.items.size()) {
case 0:
items = java.util.Collections.emptySet();
break;
case 1:
items = java.util.Collections.singleton(this.items.get(0));
break;
default:
items = new java.util.LinkedHashSet<Integer>(this.items.size() < 1073741824 ? 1 + this.items.size() + (this.items.size() - 3) / 3 : java.lang.Integer.MAX_VALUE);
items.addAll(this.items);
items = java.util.Collections.unmodifiableSet(items);
}
return new Elements(items, b);
}
build()
您可以将其用作自定义方法的起点。
推荐阅读
- spring - 来自 OpenShift 中入口的 JWT 身份验证
- node.js - 在平均堆栈应用程序中使用linkedin进行身份验证
- linux - Bash 脚本:将带有文本文件的路径初始化为变量并迭代文本文件中的列表
- javascript - 如何在 Javascript 中为 Promise.all 编写 Polyfill 时处理 setTimeout 情况
- yaml - Swagger UI - 更新表单按钮文本
- r - 计算向量中的前导零
- loops - 块状重复块不适用于自定义块和预定义块
- azure - Azure Cosmos DB 触发器 - 发生多个更改时触发
- list - 在 Scala 中,根据与另一个元素的相似性来删除列表中元素的最有效方法是什么?
- c++ - Eclipse 无法在单独的文件中解析具有显式实例化的模板类