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对象的代码。