gpt4 book ai didi

java - 如何在构造函数上使用 lombok 的 @Tolerate

转载 作者:行者123 更新时间:2023-12-04 07:31:43 25 4
gpt4 key购买 nike

@Tolerate注释是 lombok 中的一项实验性功能其中目标类型是方法或构造函数。 Lombok website提到:

Any method or constructor can be annotated with @Tolerate and lombok will act as if it does not exist.


它陈述了一个 setter 方法的例子:
@Setter
private Date date;

@Tolerate
public void setDate(String date) {
this.date = Date.valueOf(date);
}
在上面的例子中 如果我们没有添加 @Tolerate ,然后 lombok 会 不是 生成 setDate(Date date)因为同名的方法已经存在(即使参数类型不同)。
因此,从这个示例中可以清楚地了解它对方法的作用。
但是我无法理解如何将此注释用于构造函数。
@AllArgsConstructor
public class One {
private int id;
private String name;

// adding @Tolerate here does nothing.
public One(int a, int b) {
}
}
在上面的代码中,即使存在另一个参数数量相同但类型不同的构造函数,lombok 也会生成一个全参数构造函数。
那么,我们如何使用 @Tolerate在构造函数的上下文中?

最佳答案

@Data , @Value@Builder注释创建构造函数(@Data 情况下所有必需参数的构造函数,@Value@Builder 情况下所有参数的构造函数)。但是,如果不存在其他构造函数,它们只会执行这些操作。如果您创建自己的构造函数,@Data , @Value@Builder不会创建它们的构造函数,除非你用 @Tolerate 注释你自己的构造函数。 .
简而言之,@Tolerate如果您将它与 @Data 一起使用,则在构造函数上只会有所不同。 , @Value@Builder .如果与 @NoArgConstructor 一起使用,则无效, @AllArgsConstructor@RequiredArgsConstructor ,就像 Gautham 注意到的那样。
例子:

@Value
public class Main {
private int id;
private String name;

@Tolerate // Now the allArgsConstructor will be created. If you omit the annotation, no allArgsConstructor will be created.
public Main(String name) {
this.name = name;
this.id = 0;
}
}

关于java - 如何在构造函数上使用 lombok 的 @Tolerate,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67900313/

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