一、背景:
以前的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的使用,爭議較多,我個人雖不是很喜歡,但有時候還是具體情況具體對待了。