@Tolerate
注释是 lombok
中的一项实验性功能,其中目标类型是方法或构造函数。龙目岛 website 提到:
任何方法或构造函数都可以用@Tolerate 进行注解,lombok 会表现得好像它不存在一样。
它说明了一个 setter 方法的例子:
@Setter
private Date date;
@Tolerate
public void setDate(String date) {
this.date = Date.valueOf(date);
}
在上面的例子中如果我们没有添加@Tolerate
,那么lombok将NOT生成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
?
答案 0 :(得分:2)
@Data
、@Value
和 @Builder
批注创建构造函数(@Data
情况下所有必需参数的构造函数,{{} 中所有参数的构造函数1}} 和 @Value
情况)。但是,如果不存在其他构造函数,它们只会执行这些操作。如果您创建自己的构造函数,@Builder
、@Data
和 @Value
将不会创建它们的构造函数,除非您使用 @Builder
注释您自己的构造函数。< /p>
简而言之,构造函数上的 @Tolerate
只有在与 @Tolerate
、@Data
或 @Value
一起使用时才会有所不同。就像 Gautham 注意到的那样,如果你将它与 @Builder
、@NoArgConstructor
或 @AllArgsConstructor
一起使用,它没有任何效果。
示例:
@RequiredArgsConstructor