一、背景:
以前的Java项目中,充斥着太多不友好的代码,如:POJO的getter/setter/toString;异常处理;I/O流的关闭操作等,这些样板代码既没有技术含量,又影响着代码的美观,因此Lombok应运而生。
任何技术的出现都是为了解决某一类问题,如果在此基础上再建立奇技淫巧,不如回归Java本身,应该保持合理使用而不滥用。
二、具体使用和安装
1)引入相应的maven包
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.18</version>
<scope>provided</scope>
</dependency>
Lombok的scope=provided,说明它只在编译阶段生效,不需要打入包中。事实正是如此,Lombok在编译期将带Lombok注解的Java文件正确编译为完整的Class文件。
2)前往官网下载:https://projectlombok.org/download lombok.jar
3)将lombok.jar放在eclipse的安装目录下。
4)cmd窗口(Windows系统)或Shell窗口(Linux 系统)执行命令:java -jar lombok.jar
5)基于4),在弹出的窗口中点击Specify location.. 选择eclipse 的安装目录。然后点击install/update。
安装成功,退出,在eclipse.ini中会看到新增lombok.jar一行。
6)有时可能这样自动安装的路径导致eclipse无法启动,可以将eclipse.ini文件自动追加的一行修改为如下:
-Xbootclasspath/a:lombok.jar
-javaagent:lombok.jar
7)启动eclipse ,clean。错误消失。
三、关于lombok的使用简要说明
1. @NonNull:可以帮助我们避免空指针。
import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
}
2. @Cleanup: 自动帮我们调用close()方法。
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);
}
}
}
3. @Getter / @Setter: 自动生成Getter/Setter方法
import lombok.AccessLevel;
import lombok.Getter;
import lombok.Setter;
public class GetterSetterExample {
@Getter @Setter private int age = 10;
@Setter(AccessLevel.PROTECTED) private String name;
}
4. @NoArgsConstructor: 自动生成无参数构造函数。
5. @AllArgsConstructor: 自动生成全参数构造函数。
6. @Data: 自动为所有字段添加@ToString, @EqualsAndHashCode, @Getter方法,为非final字段添加@Setter,和@RequiredArgsConstructor!
备注:网上关于lombok的使用,争议较多,我个人虽不是很喜欢,但有时候还是具体情况具体对待了。