lombok插件安装_让人又爱又恨的Lombok,到底该不该用

Lombok是一个Java库,通过注解简化POJO类的样板代码,如自动创建getter/setter、equals、hashCode和toString。然而,它也引发了一些争议,包括调试困难、依赖IDE插件、测试覆盖率展示问题以及限制了自定义实现。尽管提高了开发效率,但可能不适于所有团队和项目。
摘要由CSDN通过智能技术生成

1 简介

Lombok,印尼的一个岛屿,龙目岛。但在Java的世界里,它是一个方便的类库,能提供很多便利,因此得到许多人的青睐。但也有不少反对声音。这是为什么呢?

6f052f596d4817c43e5ab12d6c9cd398.png

之前去龙目岛拍的日落。

2 Lombok提供的便利

一般我们在Java中用到POJO时,就很容易想到要用Lombok,如VO、DTO、DO等。使用Lombok需要安装对应IDE的插件,同时需要引入依赖:

  org.projectlombok  lombok  1.18.10  provided

举个例子,如果不用Lombok,实现getter/setter、equals、hashCode、toString代码量非常大,如下所示:

package com.pkslow.basic.lombok;import java.util.Objects;public class Book {    private String name;    private int id;    private double price;    private String author;    private String desc;    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public double getPrice() {        return price;    }    public void setPrice(double price) {        this.price = price;    }    public String getAuthor() {        return author;    }    public void setAuthor(String author) {        this.author = author;    }    public String getDesc() {        return desc;    }    public void setDesc(String desc) {        this.desc = desc;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Book book = (Book) o;        return id == book.id &&                Double.compare(book.price, price) == 0 &&                Objects.equals(name, book.name) &&                Objects.equals(author, book.author) &&                Objects.equals(desc, book.desc);    }    @Override    public int hashCode() {        return Objects.hash(name, id, price, author, desc);    }    @Override    public String toString() {        return "Book{" +                "name='" + name + ''' +                ", id=" + id +                ", price=" + price +                ", author='" + author + ''' +                ", desc='" + desc + ''' +                '}';    }}

而且大部分是样板代码,没有太多实际逻辑。

如果使用Lombok则非常简单,一个注解@Data就可以完成以上工作(安装了Lombok插件后才能显示右边的方法):

a4944bd2892910946499d17033536c3a.png

Lombok的常用注解有:

@NonNull:用于做空指针异常检测;

@Cleanup:自动资源关闭;

@Getter/@Setter:自动生成get/set方法;

@ToString:生成toString方法,方便打印调试;

@EqualsAndHashCode:生成equals和hashCode方法,注意这两个应该同时去实现;

@NoArgsConstructor, @RequiredArgsConstructor and @AllArgsConstructor:构造方法;

@Data:相当于 @ToString+ @EqualsAndHashCode+@Getter+ @Setter +@RequiredArgsConstructor。

@Builder:生成builder方法;

@Log:日志相关:

@CommonsLog:org.apache.commons.logging.LogFactory.getLog(LogExample.class);@Flogger:com.google.common.flogger.FluentLogger.forEnclosingClass();@JBossLog:org.jboss.logging.Logger.getLogger(LogExample.class);@Log:java.util.logging.Logger.getLogger(LogExample.class.getName());@Log4j:org.apache.log4j.Logger.getLogger(LogExample.class);@Log4j2:org.apache.logging.log4j.LogManager.getLogger(LogExample.class);@Slf4j:org.slf4j.LoggerFactory.getLogger(LogExample.class);@XSlf4j:org.slf4j.ext.XLoggerFactory.getXLogger(LogExample.class);@CustomLog:com.foo.your.LoggerFactory.createYourLogger(LogExample.class);

所以Lombok确实能给我们带来极大的便利,减少大量重复、无业务逻辑的代码,代码显得比较干净;修改了field的名字,不用多处修改;提高开发效率。

3 Lombok所带来的问题

当然,也有人提出了不同意见:

调试时没有具体代码,不方便Debug;

需要强制别人安装第三方插件,不然会显示报错;

在检查测试覆盖率的时候,无法直观显示哪些代码已覆盖和未覆盖;

无法按自己意愿实现,比如toString方法,有时需要输出不一样的String格式,并不一定是按Lombok的实现;

对于一些常用的方法,IDE已经可以自动生成,不需要Lombok一样可以高效开发。

f3b4d3fa6b583b9d0ac1e8ed30425a23.png

IDEA没有提供Builder,但可以通过安装插件方式使用。

18ee0192d047cce736e1231f41bba9dd.png

成功安装后,就能生成Builder代码了:

dfd85c533343adbec1d5c9d0bc455221.png

4 总结

一开始我是支持使用Lombok的,经过一段时间使用及出现了一些问题后,我还是觉得通过IDE自动生成代码的方式更适合。毕竟强制要求别人安装插件这种实在是太野蛮了,而通过IDEA生成代码,别人不安装插件也不会有报错。

另外,多几行代码还能体现工作量,哈哈哈哈哈哈......

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值