gpt4 book ai didi

java - Lombok 各种构造函数的注释?

转载 作者:太空狗 更新时间:2023-10-29 23:01:21 29 4
gpt4 key购买 nike

我有课

public class Answer<T> {
private T data;

public Answer(T data) {
this.data = data;
}

public Answer() {
}

public T getData() {
return data;
}

public Answer<T> setData(T data) {
this.data = data;
return this;
}
}

我想用 Lombok 来简化它。

如果我添加注释 @AllArgsConstructor,我将看不到默认构造函数。

@Data
@AllArgsConstructor
public class Answer<T> {
private T data;

public Answer<T> setData(T data) {
this.data = data;
return this;
}
}

是否可以在Lombok中同时拥有两个构造函数?

最佳答案

你的类相当于:

@Accessors(chain = true)
@Data
@NoArgsConstructor
@AllArgsConstructor
public class Answer<T> {

private T data;
}

尽管严格来说,这会在所有 变量上添加toStringequalshashCode 方法。这可能(并且经常)导致无限循环。非常小心 @Data

@Accessors(chain = true) 使 setter 实现返回 this,更多信息 here .

可以添加多个构造函数注解:

Unlike most other lombok annotations, the existence of an explicit constructor does not stop these annotations from generating their own constructor.

请注意,@Accessors 是实验性的,因此可能会在未来的某个时候更改/重命名。

我更喜欢 @Builder@AllArgsConstructor 因为它只允许设置必需的参数,而所有参数的构造函数是全有或全无。它还会生成更具可读性的代码,请考虑

new Thing(true, 1, 4, false, 4, 4.0)

对比

new Thing.Builder().
setANamnedProperty(true).
setAnotherNamnedProperty(1).
....
build();

关于java - Lombok 各种构造函数的注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25809156/

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