javalombokintellij-plugin

lombok @Data complains "lombok needs a default constructor in the base class", when abstract class having final field


@Data
public abstract class B {
   private final String str;
}

@Data
public class A extends B{
   private final String s;
}

Data on class A complains in intellij, but the codes can get compiled successfully through command line, not sure what to do


Solution

  • Lombok is complaining that it can't access class hierarchies. With B having a final field, you need it to be initialized in the constructor, which means that A's constructor has to call a non-default constructor. This isn't possible with Lombok. There's @Superbuilder in Lombok, which is about the only feature of Lombok dealing well with class hierarchies.


    By the way, this is a bad use of @Data . @Data is meant for mutable data and there's nothing mutable in your classes. So using @Data is simply wrong... and whether it compiles or not doesn't really matter.

    Sometimes, partially mutable data is needed, but I try hard to avoid it as it's confusing (some fields can be set, some can't) and they provide disadvantages of both.