Intellij idea 将lombok@Value、@noargsconstuctor、@allargsconstuctor组合在一起

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框架的构造函数注释既需要无参数构造函数,也需要初始化字段的构造函数

我正在类上使用lombok注释:

@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”