gpt4 book ai didi

java - 无法使用 @AllArgsConstructor 访问构造函数,但可以使用 @RequiredArgsConstructor

转载 作者:行者123 更新时间:2023-12-02 01:26:28 27 4
gpt4 key购买 nike

我有一个 POJO 类,如下所示:

@Value
@Builder
public class XYZ {

@NonNull
private final String a;

@NonNull
private final String b;

@NonNull
private final State state;

public enum State {
STARTED
}
}

当我尝试从 tst/文件夹创建 XYZ 类的对象时,它失败并出现错误,无法从外部包访问构造函数,但是当我在该 POJO 中使用 @RequiredArgsConstructor 时,它开始正常工作并且不运行t 显示错误。实际错误是这样的:

error: XYZ(String,String,State) is not public in XYZ; cannot be accessed from outside package

所以,我想知道@AllArgsConstructor(由@Value提供)和@RequiredArgsConstructor之间有什么区别,因为我看到了这个问题。

最佳答案

在处理注释时,Lombok 不考虑源文件中这些注释的顺序。相反,每种注释类型都有一个确定处理顺序的优先级。这是因为不同注释类型之间存在依赖关系。

@Builder 的优先级高于@Value。因此,Lombok 首先生成构建器所需的包私有(private)的 all-args 构造函数。因此,处理 @Value 时已经存在一个构造函数。根据the @Value documentation ,“任何显式构造函数,无论参数列表如何,都意味着 lombok 不会生成构造函数”。

但是,在我看来,这在文档中有点误导。为 @Builder 生成的构造函数更像是实现细节,但我不会将其称为“显式构造函数”。 (作者所说的“显式”可能是指“不是默认构造函数”。)

一旦添加了@RequiredArgsConstructor@AllArgsConstructor(在本例中是相同的),构造函数就会变为公共(public),而@Builder > @Value 也不必再生成它。

关于java - 无法使用 @AllArgsConstructor 访问构造函数,但可以使用 @RequiredArgsConstructor,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56840636/

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