Search code examples
javalomboksetterfinal

How to avoid NPE due to lombok @Data annotation in a class with final field?


I'm getting null pointer exception caused by:

Caused by: java.lang.UnsupportedOperationException: No accessor to set property private final java.lang.String

After some research, I realized that it's happening because my class is annotated with @Data and I have a final field defined within it.

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

    private final String name = "Name A";
}

I'm creating objects of ClassA here:

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

Any suggestion on how to handle this problem?


Solution

  • The approach below fixes the issue and also makes more sense in terms of business perspective, which is not in discussion here.

    @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();
    }