Lombok 项目是一个 Java 库,它会自动插入编辑器和构建工具中,Lombok 提供了一组有用的注释,用来消除 Java 类中的大量样板代码。可以替换数百行代码从而产生干净,简洁且易于维护的 Java 类。Lombok 也存在一定风险,在一些开发工具商店中没有 Project Lombok 支持选择。 IDE 和 JDK 升级存在破裂的风险,并且围绕项目的目标和实施存在争议。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.12</version>
</dependency>
想要使用 Lombok 必须要使用支持 Lombok 的开发工具,此处以 IDEA 为例,IDEA 必须要安装相关插件才能使用 Lombok,其他开发工具类似。
注解 | 说明 |
---|---|
@Setter | 注解在类或字段,注解在类时为所有字段生成 setter 方法,注解在字段上时只为该字段生成 setter 方法 |
@Getter | 使用方法同上,区别在于生成的是 getter 方法。需要注意的是 Boolean 生成的是 isXxx 不是 getXxx |
@ToString | 注解在类,添加 toString 方法 |
@EqualsAndHashCode | 注解在类,生成 hashCode 和 equals 方法 |
@NoArgsConstructor | 注解在类,生成无参的构造方法 |
@RequiredArgsConstructor | 注解在类,为类中需要特殊处理的字段生成构造方法,比如 final 和被 @NonNull 注解的字段 |
@AllArgsConstructor | 注解在类,生成包含类中所有字段的构造方法 |
@Data【常用】 | 注解在类,生成 setter/getter、equals、canEqual、hashCode、toString 方法,如为 final 属性,则不会为该属性生成 setter 方法 |
@Slf4j | 注解在类,生成 log 变量,严格意义来说是常量 |
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/9/10
* @description Lombok 示例
*/
@Data
public class Student {
private Long id;
private String name;
private Integer age;
private Date birDate;
private String birStr;
}
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/9/10
* @description 自定义 setter/getter
*/
@Data
public class Student {
private Long id;
private String name;
private Integer age;
private Date birDate;
private String birStr;
/*
* 会使用此处的 setter/getter,lombok 不会再生成对应的方法
*/
public Date getBirDate() {
return birDate;
}
public void setBirDate(Date birDate) {
this.birDate = birDate;
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
this.birStr = sdf.format(birDate);
}
public String getBirStr() {
return birStr;
}
public void setBirStr(String birStr) {
this.birStr = birStr;
}
}
/**
* Created with IntelliJ IDEA.
*
* @author Demo_Null
* @date 2020/9/10
* @description 测试
*/
public class Demo {
public static void main(String[] args) {
Student student = new Student();
student.setBirDate(new Date());
student.setName("张三");
System.out.println(student);
}
}