Lombok 可以通过简单的注解,帮助开发人员消除 Java 中尤其是 Entity(实体)类中的冗长代码。
如果 IDEA 版本在 2020.3 以上,不需要安装 Lombok 插件;否则需要安装 Lombok 插件。
<dependency>
<groupId>org.projectlombokgroupId>
<artifactId>lombokartifactId>
<version>1.18.12version>
dependency>
作用:为类中的属性提供 getter 和 setter 方法
位置:类上方或属性上方,在属性上方则为该属性生成 getter 和 setter 方法;在类上方则表示为该类下的所有属性生成 getter 和 setter 方法。
属性:AccessLevel,可以设置 get 和 set 方法的访问权限。AccessLevel是一个枚举类
注意:
//给类下所有的属性添加get和set方法
@Getter
@Setter
public class User {
@Setter(value = AccessLevel.PRIVATE) //给id属性的set方法设置为私有权限
private Integer id;
@Setter(value = AccessLevel.PUBLIC) //给userName属性的set方法设置为公开权限
private String userName;
private String password;
}
作用:生成 toString 方法,默认情况下它会按照顺序打印类名称以及每个字段
位置:类上方
属性:
@Getter
@Setter
@ToString(exclude = {"password"}) //设置toString方法,该方法不会显示password的值
public class User {
private Integer id;
private String userName;
private String password;
}
作用:生成 equals、hashCode 和 canEqual 方法。用于比较两个对象是否相同
位置:类上方
属性:
@Getter
@Setter
@ToString
@EqualsAndHashCode(exclude = {"password"}) //排除password,只使用id,userName对比及计算hash
public class User {
private Integer id;
private String userName;
private String password;
}
了解:判断两个对象是否相等
在 Java 中,调用 equals() 方法可以判断两个对象是否相等。如果类没有重写该方法,则判断两个引用是否指向同一个对象。
如何重写 equals():
而在 Set 中判断对象是否重复,在调用 equals() 之前,需要先调用 hashCode() 计算 hash 值。所以判断对象相等需要重写 equals()、canEqual()、hashCode() 三个方法。
作用:用于方法参数前,表示调用该方法时参数不能为 null;用于属性上方,表示为该属性赋值时不能为 null
位置:方法参数前 或 属性上方
作用:前两个注解可以生成无参构造方法和全参构造方法,第三个注解可以生成带有 final 和 @NonNull 修饰的属性的构造方法
位置:类上方
注意:如果类中含有 final 修饰的成员变量,则无法使用 @NoArgsConstructor 注解
作用:相当于同时添加@Getter、@Setter、@ToString、@EqualsAndHashCode、@RequiredArgsConstructor五个注解。项目中常用
位置:类上方
作用:提供链式风格创建对象
位置:类上方
User user = User.builder().id(1).userName("我真真的是小白").password("123456").build();
作用:在类中生成日志对象,在方法中可以直接使用,可以省去从日志工厂生成日志对象这一步
位置:类上方
注意:针对不同的日志实现产品,有不同的日志注解,使用 @Log 表示使用 Java 自带的日志功能,除了 @Log ,还可以使用 @Log4j、@Log4j2、@Slf4j等注解,来使用不同的日志产品。
作用:自动关闭资源,如 IO 流对象
位置:代码前方
public void read() throws FileNotFoundException{
@Cleanup FileInputStream file = new FileInputStream("文件名");
//file.close();
}
作用:对方法中异常进行捕捉并抛出
位置:方法上方
@SneakyThrows
public void read(){
@Cleanup FileInputStream file = new FileInputStream("文件名");
}