问题陈述
我想强制执行这样一种情况,即每当创建不可变 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 对象,则对象创建在运行时抛出空指针异常。 但我想在编译时强制执行此检查,如果未将 str 作为参数给出,是否有办法停止对象创建?
最佳答案
如果您手动编写构建器,则可以做到这一点。让您的 builder()
工厂方法返回一个类似 UnreadyBuilder
的类,它没有 build()
方法。然后,UnreadyBuilder
上的 setName()
setter(或其他任何名称)可以返回一个 ReadyBuilder
对象,该对象确实具有 build()
方法。
也就是说:你真的需要在编译时检查这个吗?这是大量额外的代码,但带来的好处却微乎其微。
关于java - 如何使用强制变量强制实例化不可变的pojo?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47598800/