Intellij idea 将lombok@Value、@noargsconstuctor、@allargsconstuctor组合在一起
我正在类上使用lombok注释:Intellij idea 将lombok@Value、@noargsconstuctor、@allargsconstuctor组合在一起,intellij-idea,lombok,Intellij Idea,Lombok,我正在类上使用lombok注释: @Value @NoArgsConstructor @AllArgsConstructor public class TestClass implements Serializable { private String x; private String y; private String z; } 我需要@Value,因为我希望字段是不可变的,而作为我使用的ORM框架的构造函数注释既需要无参数构造函数,也需要初始化字段的构造函数
@Value
@NoArgsConstructor
@AllArgsConstructor
public class TestClass implements Serializable {
private String x;
private String y;
private String z;
}
我需要@Value,因为我希望字段是不可变的,而作为我使用的ORM框架的构造函数注释既需要无参数构造函数,也需要初始化字段的构造函数
但是IntelliJ将此标记为错误,指出需要初始化字段,而我们有一个由lombok定义的noarg构造函数
如何解决此问题?为什么不使用所需的默认值定义无参数构造函数
@Value
@AllArgsConstructor
public class TestClass implements Serializable {
private String x;
private String y;
private String z;
TestClass() {
x = "";
y = "";
z = "";
}
}
使用
@Value
,lombok将所有字段标记为final
,如果没有默认值,@noargsconstuctor
将导致字段从未初始化,这就是IntelliJ抱怨的原因
您可以使用
lombok.noArgsConstructor.extraPrivate=true
因此,@noargsconstuctor
将使用默认值生成contractor。可以使用@FieldDefaults
设置默认值
见文件:
您不能让值类的最终字段具有无参数构造函数,因为您无法设置字段。您可以通过反射或在无参数构造函数中更合理地设置字段。也可以使用@noargsconstuctor(force=true),它“将所有最终字段初始化为0/null/false”