一、Lombok
Lombok是一个Java库,它通过简单的注释来自动生成一些样板代码,比如getter、setter、equals、hashCode、toString等方法。这样可以让代码更加简洁,减少重复的代码编写工作,提高开发效率。
在使用Lombok时,应当权衡其带来的便利和可能的风险,合理地应用它,保持代码的清晰和可维护性。
二、Lombok引入
普通maven项目Lombok依赖为:
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.22</version>
<scope>provided</scope>
</dependency>
三、Lombok注解
1. @Setter和@Getter
提供getter和setter方法
ps: static修饰的变量不生成getter和setter方法
//注解写在类上时 表示给类的所有属性都生成set和get方法
@Setter
@Getter
public class User {
//写在属性上时 表示只给当前属性 生成set和get方法
@Setter
@Getter
String name;
//表示生成的set方法是私有的
@Setter(AccessLevel.PRIVATE)
Integer age;
/*
属性值
PUBLIC,
MODULE,
PROTECTED,
PACKAGE,
PRIVATE,
NONE;
* */
}
3. @ToString
生成toString方法,默认情况下它会按顺序打印类名称以及每个字段。
//exclude表示toString方法输出属性
@ToString(exclude = {"age","name"})
public class User {
Integer id;
String name;
Integer age;
}
3.@EqualsAndHashCode
生成equals和hashCode、canEqual方法。用于比较两个类对象是否相同。
写在类上
- @NoArgsConstructor,@AllArgsConstructor
NoArgsConstructor: 生成无参构造方法
AllArgsConstructor: 生成有参构造方法
@NoArgsConstructor
@AllArgsConstructor
public class User {
public Integer id;
public String name;
public Integer age;
}
5.@Data
会为类的所有属性自动生成setter/getter、equals、canEqual、hashCode、toString方法,如为final属性,则不会为该属性生成setter方法。
@Data
public class User {
public Integer id;
public String name;
public Integer age;
}
四、Lombok的一些坑
- 使用@Data注解生成的equals方法,默认只判断了当前类的属性是否相等,而忽略了父类的属性,从而使两个明显不相等的对象通过equals尽判断为相等
- lombok对于第一个字母小写第二个字母大写的属性,生成的setter/getter方法,与mybatis获取属性的方法容易造成冲突。如sName属性,生成getSName,setSName,但在mybatis中并不能正确的解析到对应的属性名称为sName