gpt4 book ai didi

java - 基类中的 @Builder.Default 不起作用?

转载 作者:行者123 更新时间:2023-11-30 07:41:16 26 4
gpt4 key购买 nike

我正在用 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;
}

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

Sub.builder()
.c(100)

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

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

最佳答案

@Builder 不适用于继承,因为像 Lombok 这样的注释处理器可以做的事情存在技术限制。由于这些限制,Lombok 无法在父类(super class)中的参数名称和字段名称之间建立链接。 (而且这在概念上也很难做到,因为您可以用不同的方式命名参数,然后您必须进行更深入的代码分析。)

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

另一种方法是在父类(super class)中使用手动构造函数并在那里设置默认值。

关于java - 基类中的 @Builder.Default 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56193373/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com