我想为“列表”类型的字段添加空值
由于我在下面强调的是初始化对象的点,因此在这些情况下,我们应该做一些事情来初始化空列表(如果为null)。
是否有一些框架/注释,如果为null,将设置空列表?
下面是我目前所做的
public class TestMapin {
public static void main(String[] args) throws IllegalAccessException {
Test test = new Test();
notNull(test);
System.out.println(test);
}
public static void notNull(Object test) throws IllegalAccessException {
for (Field field : test.getClass().getDeclaredFields()) {
boolean access = field.canAccess(test);
field.setAccessible(true);
if (field.get(test) == null) {
if (field.getType().isAssignableFrom(List.class)) {
field.set(test, Collections.emptyList());
} else if (field.getType().isAssignableFrom(Map.class)) {
field.set(test, Collections.emptyMap());
}
} else if (field.getType().getPackageName().contains("org.owozniak.selfestem")) {
notNull(field);
}
field.setAccessible(access);
}
}
}
@Setter
@ToString
class Test {
private ArrayList<String> stringList;
private Box box = Box.builder().build();
private Magazine magazine;
}
所以,我需要使用 -通过toBuilder初始化-@单注 -控制器/伪装客户-将此代码段注入到弹簧过滤器中 -通过构造函数进行初始化-使用静态工厂方法,该方法将使用此代码片段并返回“增强”实例
还有其他想法/框架吗?
答案 0 :(得分:0)
我建议将@Singular注释与@Builder一起使用。这将使用非空列表初始化集合。通过使用@Singular注释对参数之一(如果使用@Builder注释方法或构造函数)或字段(如果使用@Builder注释类),lombok将把该生成器节点视为一个集合,并生成2'adder方法而不是“设置”方法。一个将单个元素添加到集合中,另一个将另一个集合的所有元素添加到集合中。将不会生成仅设置集合(替换已添加的任何内容)的设置器。还会生成“清除”方法。您可以阅读我最近的文章https://technicalsand.com/using-lombok-advanced-features/
的完整详细信息import lombok.Builder;
import lombok.Singular;
import java.util.Set;
@Builder
public class BuilderExample {
@Builder.Default private long created = System.currentTimeMillis();
private String name;
private int age;
@Singular
private Set<String> occupations;
}