Java代码精简神器Lombok的使用

Java 代码中有很多冗余、臃肿的代码(如:Getter/Setter、构造方法、hashCode 方法等)lombok 是一款 IDE 插件,其专注于消除此类代码,以达到代码简洁高效的目的。它同时提供了 IDEA 以及 Eclipse 相关的插件,本文以 IDEA 为例,做一些相关的示例

准备工作

1)IDEA 中安装相关的插件,如图:


2)IDEA 编译器相关设置,如图:

构建项目

以 SpringBoot 项目为例,以下为 pom.xml 文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>com.example</groupId>
<artifactId>lombok-example</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>lombok-example</name>
<description>Demo project for Spring Boot</description>

<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.4.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>

<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter</artifactId>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>

常用注解

lombok 提供了很多注解,常用的如下。

注解 作用
Getter 注解在属性上,提供 getter 方法;
Setter 注解在属性上,提供 setter 方法;
AllArgsConstructor 注解在类上,提供构造方法,参数为所有属性;
NoArgsConstructor 注解在类上,提供无参构造方法;
Data 注解在类上,提供所有属性的 getter 方法、setter 方法以及 equals、hashCode、toString 等方法;
Log 注解在类上,提供一个名为 log 的属性,类型为 java.util.logging.Logger,也可使用 @Log4j、@Log4j2、Slf4j 等其他注解;
ToString 注解在类上,提供 toString 方法;
EqualsAndHashCode 注解在类上,提供 equals、hashCode 方法;
Synchronized 注解在方法上,提供 synchronized,可以指定锁的名称;
NonNull 注解在方法参数上,提供对参数的校验,防止空指针异常;
Cleanup 注解在局部变量上,提供对资源的关闭,即调用 close 方法;

使用示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
package com.example.lombok;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.ToString;
import lombok.experimental.Accessors;
import lombok.extern.slf4j.Slf4j;

@Data
@ToString
@Accessors(chain = true)
@NoArgsConstructor
@AllArgsConstructor
public class User {
private Integer uid;
private String username;
private String password;
}

@Slf4j
class UserService {

public static void main(String[] args) {
User user = new User().setUid(1).setUsername("username").setPassword("123");
log.debug("user = {}", user);
}
}

直接运行看下结果是否正确吧:

1
21:26:31.742 [main] DEBUG com.example.lombok.UserService - user = User(uid=1, username=username, password=123)

如此一来,代码变得相当的简洁明了。

最终生成的代码结构

lombok 通过插件在编译期间根据注解自动生成了相关的代码,通过下面的代码结构图可以看出一些端倪:

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×