[英]How to use lombok's @Tolerate on a constructor
@Tolerate
注释是lombok
中的一项实验性功能,其中目标类型是 Method 或 Constructor。 龙目岛网站提到:
任何方法或构造函数都可以用 @Tolerate 注释,并且 lombok 将表现得好像它不存在一样。
它说明了一个 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
情况下所有必需的 arguments 的构造函数,@ @Value
和@Builder
情况下所有 arguments 的构造函数)。 但是,如果不存在其他构造函数,它们只会执行这些操作。 如果您创建自己的构造函数,@ @Builder
@Value
@Data
创建它们的构造函数,除非您使用@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;
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.