官网链接:https://projectlombok.org/
什么是 Lombok
Lombok 是一个 Java 库,它可以通过添加注解的方式,为 Java 类自动插入相应的 Getter/Setter,构造器,equals 方法等。这样就省去了手动重建代码的麻烦,简化开发,也是代码更为简洁。
当然,Lombok 也支持使用注解为 Java 类添加 Builder,自动注入日志记录变量等。
为什么使用 Lombok (优劣)
优点
显然,使用 Lombok 可以大量减少项目中的模版代码。虽然开发过程中可以通过 IDE 快速生成这些代码,但当 Java 类的变量发生变化,或者协作开发过程中有代码冲突,这无疑增加了我们无谓的工作量。
其次,Lombok 还可以增强代码的规范性,通过 @Data
注解可以自动添加包括 toString 在内的模版方法,避免了这些方法缺失,也省去了因变量修改而修改 toString,equals 方法的麻烦。
缺点
Lombok 的项目集成和使用,它需要 IDE 和项目都要支持。不过这不麻烦。
安装
IntelliJ IDEA
- 打开
File/Setting
或 快捷键Ctrl+Alt+S
- 选择
Plugins
- 搜索插件
IntelliJ Lombok plugin
并安装 - 重启 IDEA 即完成
STS/Eclipse
- 下载 lombok.jar
- 将 lombok.jar 放在sts(eclipse)安装目录下,和 sts.ini 文件平级的
- 在lombok.jar 的目录下,运行:
java -jar lombok.jar
,在弹出框中指定 STS/Eclipse 安装目录,点击安装 - 查看 sts.ini,正常情况应该多个一行配置:
-javaagent:XXX\lombok.jar
依赖添加
1 | <lombok.version>1.18.6</lombok.version> |
使用介绍
按使用频率从上及下排列
@Data
@Data
是 @ToString
,@EqualsAndHashCode
,所有字段上加@Getter
,所有非 final 字段加@Setter
和 @RequiredArgsConstructor
的快捷方式。它提供了这些注解的默认配置,用于满足最基本 Java 类配置。
注意:@Data 注解时,以 $-
开头的字段不会被自动注入对应方法,包括 @Getter, @Setter, @ToString和@EqualsAndHashCode 内不会包含这个字段。
@Getter @Setter
给字段添加 Getter/Setter 方法,可以添加到类或字段上。如果同时添加,以字段上的配置为准。但都会被显示声明的方法覆盖。
对于一些 boolean
类型的字段,需要注意 is-
开头的字段。但对于引用类型 Boolean 无此影响。
1 | public boolean isFlower; |
@Getter 和 @Setter 可以通过指定 PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE, NONE
设置访问权限。
@ToString
添加 toString
方法。
注意,如果一个类继承父类,默认插入的 toString
是不会添加父类字段。要添加父类的字段,需要使用 @ToString(callSuper = true)
。
去除字段名,可以设置 includeFieldNames = false 默认为true
。
屏蔽字段,可以在字段声明时添加 @ToString.Exclude
。
1 | @ToString.Exclude private String name; |
@EqualsAndHashCode
添加 equals
和 hashCode
方法。
默认情况下,任何以$符号开头的变量都会自动排除。只能通过标记来包含它们@EqualsAndHashCode.Include
。
@EqualsAndHashCode.Exclude
用来屏蔽指定字段。
@NoArgsConstructor, @RequiredArgsConstructor, @AllArgsConstructor
添加构造方法。
设置 access = AccessLevel.PRIVATE
可以指定构造方法的访问权限。权限包括(PUBLIC, MODULE, PROTECTED, PACKAGE, PRIVATE, NONE),默认 PUBLIC。
@AllArgsConstructor
会替换掉默认的无参构造方法。如需同时存在无参构造方法和有参构造方法,可以同时添加 @NoArgsConstructor
。
注意事项
- 优先级:显示声明>字段上加注解>类上加注解
更多使用的用例,可以查询官网的详细内容。