Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何避免在带有final字段的类中由于lombok@Data注释而导致的NPE?_Java_Lombok_Setter_Final - Fatal编程技术网

Java 如何避免在带有final字段的类中由于lombok@Data注释而导致的NPE?

Java 如何避免在带有final字段的类中由于lombok@Data注释而导致的NPE?,java,lombok,setter,final,Java,Lombok,Setter,Final,我收到空指针异常,原因是: Caused by: java.lang.UnsupportedOperationException: No accessor to set property private final java.lang.String 经过一些研究,我意识到这是因为我的类用@Data注释,并且在其中定义了一个最终字段 @Data @Builder public class ClassA { private String id; private final Str

我收到空指针异常,原因是:

Caused by: java.lang.UnsupportedOperationException: No accessor to set property private final java.lang.String
经过一些研究,我意识到这是因为我的类用@Data注释,并且在其中定义了一个最终字段

@Data
@Builder
public class ClassA {
    private String id;

    private final String name = "Name A";
}
我在这里创建ClassA的对象:

public ClassA converter(InputData input) {
     if (input == null || input.getIdValue() == null) {
         return null;
     }
        
     return ClassA.builder()
               .id(input.getIdValue())
               .build();
}

关于如何处理这个问题,有什么建议吗?

下面的方法解决了这个问题,并且从业务角度来看更有意义,这里不讨论这个问题

@Data
@Builder
public class ClassA {
    private String id;
    private String name;
}

public ClassA converter(InputData input) {
     private static final String NAME = "Name";

     if (input == null || input.getIdValue() == null) {
         return null;
     }
        
     return ClassA.builder()
               .id(input.getIdValue())
               .name(NAME)
               .build();
}

对我来说效果很好。你确定lombok生成了代码吗?您可以在
target/classes
directory中检查它。很明显,您不能将setter称为最终成员。由于您没有提供导致异常的代码,我们无法判断问题的原因。请发布您的代码以创建
ClassA
object@yejianfengblue,我添加了创建ClassA对象的代码。@f_puras,我添加了创建ClassA对象的代码。