Lombok 是一个 Java 库,它作为插件安装至编辑器中,其作用是通过简单注解来精简代码,以此达到消除冗长代码的目的。
1) 通过注解自动生成成员变量的 getter、setter 等方法,使代码简洁
2) 修改类变量名时,无需关注其 getter、setter 等方法
降低源码文件的可读性。
从 Java 6 开始,javac 就支持 JSR 269 API 规范,而 Lombok 实现 JSR 269 Pluggable Annation Processing API 规范。
当我们编写代码并保存后,编辑器会自动编译源码文件,在这个过程中,源码先被转化为 AST。
然后,Lombok 插件解析 AST 是否存在 Lombok 的注解。如果存在则修改 AST ,使其生成注解对应的代码。
最终将修改的 AST 解析并生成字节码文件。
为编辑器安装 Lombok 插件。
在 IDEA 界面点击 “File”->”Settings” 弹出设置框,选择左侧 “Plugins”,通过 “Browse repositories” 搜索 lombok 关键字安装即可。
点击 Lombok.jar,下载该 jar 包。
双击 jar 包会弹出一个安装界面,点击界面的“Specify location…” 安装选择 Eclipse 的安装路径(精确到 eclipse.exe)。
使用 Lombok 的方法非常简单,就是在类上或者成员变量上添加注解即可。
为了能使用注解,我们还需要在项目中引入 lombok 的 jar 包。
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>0.9.2</version></dependency>
lombok使用过程中主要是靠注解起作用的,官网上的文档里面有所有的注解,这里不一一罗列,只说明其中几个比较常用的。
使用lombok:
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}}
不使用lombok:
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
if (person == null) {
throw new NullPointerException("person");
}
this.name = person.getName();
}}
使用lombok:
import lombok.Cleanup;import java.io.*;public class CleanupExample {
public static void main(String[] args) throws IOException {
@Cleanup InputStream in = new FileInputStream(args[0]);
@Cleanup OutputStream out = new FileOutputStream(args[1]);
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
}}
不使用lombok:
import java.io.*;
public class CleanupExample {
public static void main(String[] args) throws IOException {
InputStream in = new FileInputStream(args[0]);
try {
OutputStream out = new FileOutputStream(args[1]);
try {
byte[] b = new byte[10000];
while (true) {
int r = in.read(b);
if (r == -1) break;
out.write(b, 0, r);
}
} finally {
if (out != null) {
out.close();
}
}
} finally {
if (in != null) {
in.close();
}
}
}}
使用lombok:
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
@Getter @Setter private int age = 10;
@Setter(AccessLevel.PROTECTED) private String name;
}
不使用lombok:
public class GetterSetterExample {
private int age = 10;
private String name;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
protected void setName(String name) {
this.name = name;
}}
@NoArgsConstructor: 自动生成无参数构造函数。 @AllArgsConstructor: 自动生成全参数构造函数。 @Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor! 还有其他一些比如自动生成日志对象等等之类的注解可以到官方网站去了解,就不一一列举了。