基类中的@ Builder.Default无法正常工作?

时间:2019-05-17 20:48:07

标签: java builder lombok

我正在用龙目岛注释编写类,但遇到了问题:

@AllArgsConstructor
@Data
public abstract class Base {
    protected static final int a = 1;
    @Builder.default
    protected int b = 1;
}

public static class Sub extends Base {
    @Builder
    Sub(final int b, final int c) {
        super(b);
        this.c = c;
    }
    private int c;
}

当我尝试构建这样的Sub类时,@ Builder.default不起作用:

Sub.builder()
   .c(100)

b应该是默认值1,但实际上它是null。

我发现了一些可能与我有关的案件。似乎super()与@ Builder.Default不兼容。我仍然不知道如何使b不为null。 有人可以帮忙吗? 谢谢!

1 个答案:

答案 0 :(得分:3)

@Builder在继承方面不能很好地工作,因为像Lombok这样的注释处理器可以做的技术限制。由于这些限制,Lombok无法在参数名称和超类中的字段名称之间建立链接。 (而且从概念上讲,这样做也很困难,因为可以用不同的名称命名参数,然后必须进行一些更深入的代码分析。)

如果可以使用实验功能,可以尝试@SuperBuilder。在两个类上都添加它,并删除手动构造函数。 (请注意,IntelliJ尚不支持@SuperBuilder。)

另一种方法是在超类中使用手动构造函数,并在其中设置默认值。