gpt4 book ai didi

java - 如何使用强制变量强制实例化不可变的pojo?

转载 作者:行者123 更新时间:2023-12-02 02:27:29 28 4
gpt4 key购买 nike

问题陈述

我想强制执行这样一种情况,即每当创建不可变 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com