我正在用龙目岛注释编写类,但遇到了问题:
@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。 有人可以帮忙吗? 谢谢!
答案 0 :(得分:3)
@Builder
在继承方面不能很好地工作,因为像Lombok这样的注释处理器可以做的技术限制。由于这些限制,Lombok无法在参数名称和超类中的字段名称之间建立链接。 (而且从概念上讲,这样做也很困难,因为可以用不同的名称命名参数,然后必须进行一些更深入的代码分析。)
如果可以使用实验功能,可以尝试@SuperBuilder
。在两个类上都添加它,并删除手动构造函数。 (请注意,IntelliJ尚不支持@SuperBuilder
。)
另一种方法是在超类中使用手动构造函数,并在其中设置默认值。