我想强制执行这样一种情况:每当创建不可变pojo的实例时,必须将所有必需变量作为参数传入。
假设我有像这样的Pojo
public class pojo {
private final String str;
private int number;
}
现在,正如我所说,pojo是不可变的,我使用的是Lombok的Builder和Getter注释。 喜欢的东西,
@Getter
@Builder
public class pojo {
private final String str;
private int number;
}
现在,在这个pojo中,变量str是必需的,并且没有有效的str值的类pojo的任何实例都没有要求。
现在,可以使用Builder以这种方式构建类Pojo的对象
pojo obj = pojo.builder().build();
但字段str是必需的,上面的语句将创建一个str = null和number = 0的对象。现在我可以使用@NonNull str如果有人试图在不指定str的情况下尝试构建pojo的对象,则确保Object创建在运行时抛出Null指针Exception。 但是我想在编译时强制执行此检查,如果str没有作为参数给出,是否有办法停止对象创建?
答案 0 :(得分:2)
如果您手动编写Builder,则可以执行此操作。让您的builder()
工厂方法返回类似UnreadyBuilder
的类,该类没有build()
方法。然后,setName()
上的UnreadyBuilder
设置器(或其所谓的任何设置器)可以返回ReadyBuilder
对象,该对象具有build()
方法。
那说:你真的需要在编译时检查这个吗?它带来了很多额外的代码,可以带来非常小的好处。