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