java - 如何在构造函数上使用 lombok 的 @Tolerate
问题描述
@Tolerate
注释是一个实验特性,其中lombok
目标类型是方法或构造函数。龙目岛网站提到:
任何方法或构造函数都可以用 @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
在构造函数的上下文中使用呢?
解决方案
,和注释创建构造函数(一个构造函数用于 case 中的所有必需参数@Data
,一个构造函数用于和case中的所有参数)。但是,如果不存在其他构造函数,它们只会执行这些操作。如果您创建自己的构造函数,,并且不会创建它们的构造函数,除非您使用 . 注释自己的构造函数。@Value
@Builder
@Data
@Value
@Builder
@Data
@Value
@Builder
@Tolerate
简而言之,在构造函数上只有与,或@Tolerate
一起使用时才会有所不同。如果您将它与,或一起使用,它没有任何效果,就像 Gautham 注意到的那样。@Data
@Value
@Builder
@NoArgConstructor
@AllArgsConstructor
@RequiredArgsConstructor
例子:
@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;
}
}
推荐阅读
- javascript - 无法从 redux 存储分派状态值
- python - 迭代包括素数在内的数字
- php - "message": "未定义属性:Illuminate\\Database\\Query\\Builder::$token"
- python - 将 ace.js 编辑器的内容写入 Django 中的文件
- sql - T-SQL - 为每个组转出不同的 N 行
- mockito - 重载方法的 Mockito.Any 问题
- google-apps-script - 通过 Workspace Add-On 更改可见性设置后更新 Google 日历 UI
- python-3.x - Dask:像熊猫一样将列表添加到列值
- node.js - Google OAuth 2.0 不调用回调函数
- list - 从两个分配一个项目?