Lombok的介绍、使用和缺陷
1、Lombok的介绍
Lombok可以通过简单的注解来代替实体类中的getter/setter、equals、toString、构造函数等方法,使代码更加简洁。
2、Lombok的使用
1、安装lombok插件
打开Idea, 左上角菜单选择 ”File --> Settings", 在弹出的对话框中,左侧选择Plugins,搜索栏输入“lombok", 然后点击安装,如下图:
图片中假如没安装过,应该显示install,在安装好后,重启IDEA会生效。
2、依赖的引用
在项目的pom文件中添加lombok依赖,注意此处scope填写provided,代表这个包不需要打包发布,仅编译时需要用到
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
3、注解的使用
@Data注解包含了@Getter、@Setter、@Builder、@ToString、@EqualsAndHashCode、@AllArgsConstructor
、@NoArgsConstructor等注解,会为类的所有属性自动生成setter/getter、equals、hashCode、构造函数、toString等方法,如果只需要某一些功能,可以单独添加具体的注解。
@Data
public class User{
private Integer id;
private String name;
}
等价于添加具体lombok注解的代码:
@Getter
@Setter
@EqualsAndHashCode
@AllArgsConstructor
@NoArgsConstructor
@Builder
@ToString
public class User{
private Integer id;
private String name;
}
等价于以下没有使用lombok的代码:
public class User{
private Integer id;
private String name;
public User() {
}
public User(Integer id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
User user = (User) o;
return id == user.id &&
Objects.equals(name, user.name);
}
@Override
public int hashCode() {
return Objects.hash(id, name);
}
@Override
public String toString() {
return "User{" +
"id=" + id +
", name='" + name + '\'' +
'}';
}
}
@Cleanup注解能够自动释放资源。
public void jedisExample(String[] args) {
try {
@Cleanup Jedis jedis = redisService.getJedis();
} catch (Exception ex) {
logger.error(“Jedis异常:”,ex)
}
等价于以下没有使用lombok的代码:
Jedis jedis= null;
try {
jedis = redisService.getJedis();
} catch (Exception e) {
logger.error(“Jedis异常:”,ex)
} finally {
if (jedis != null) {
try {
jedis.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
@NonNull注解能够为属性、方法或构造函数的参数提供非空检查。
public void notNullExample(@NonNull String string) {
//方法内的代码
}
等价于以下没有使用lombok的代码:
public void notNullExample(String string) {
if (string != null) {
//方法内的代码相当于如下:
} else {
throw new NullPointerException("null");
}
}
3、Lombok的缺陷
1、一旦使用lombok插件,那么团队中其他成员也必须安装此插件,否则会编译报错。
2、使用@Data注解的类被继承后,子类的equals方法的重写会出现只有两个对象是同一个对象时,才返回true,否则总是false,所以会导致equls()方法失效。所以使用@Data注解后,最好不要有继承关系,或则自己重写equals()方法。