1 简介

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

之前去龙目岛拍的日落。

2 Lombok提供的便利

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

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.10</version>
<scope>provided</scope>
</dependency>

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

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插件后才能显示右边的方法):

Lombok的常用注解有:

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

@Cleanup:自动资源关闭;

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

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

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

@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一样可以高效开发。

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

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

4 总结

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

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


欢迎访问南瓜慢说 www.pkslow.com获取更多精彩文章!

欢迎关注微信公众号<南瓜慢说>,将持续为你更新...

多读书,多分享;多写作,多整理。

最新文章

  1. Firebug调试js代码
  2. UML——在Visual Studio 2013/2015中设计UML类图
  3. stopImmediatePropagation的应用
  4. (笔记)Linux内核学习(七)之内核同步机制和实现方式
  5. Android 代码中文字在手机上显示乱码问题解决方法
  6. Java拾穗
  7. 重构5-Pull Up Field(字段上移)
  8. jsp连接MySQL操作GIS地图数据,实现添加point的功能
  9. You and your research
  10. docker学习笔记(1)
  11. cocos2dx tag和zorder
  12. jquery validate扩展验证方法
  13. 新概念英语(1-57)An unusual day
  14. Oracle Data Provider for .Net classes文档
  15. 解决React通过ajax加载数据更新页面不加判断会报错的问题
  16. Nginx CGI反向代理对照
  17. Testing - 软件测试知识梳理 - 基础概念
  18. c# 线程 WPF 进度百分比(菜鸟)
  19. js如何判断访问来源是来自搜索引擎(蜘蛛人)还是直接访问
  20. 用Python中的tkinter模块作图(续)

热门文章

  1. Spring Boot 教程 (4) - swagger-ui
  2. Jmeter基础-下载与安装
  3. Pyqt5_实例1
  4. js中时间戳和时间格式之间的转换
  5. Event Loop、 宏任务和微任务
  6. Tortoise svn 基础知识
  7. Java之预定义
  8. 几种常见的app推广形式
  9. 【转】网页的title左边的小图片怎么添加
  10. 手把手教你学numpy,从此数据处理不再慌【三】