lombok簡介
lombok是之前實習的時候發現的一個非常好用的小工具,剛見到的時候就感覺非常驚豔,有一種相見恨晚的感覺,用了一段時間之後感覺的確挺不錯,所以特此來推薦一下。
lombok的官方地址:https://projectlombok.org/
lombok的Github地址:https://github.com/rzwitserloot/lombok
那麼lombok到底是個什麼呢,lombok是一個可以通過簡單的註解的形式來幫助我們簡化消除一些必須有但顯得很臃腫的 Java 程式碼的工具,簡單來說,比如我們新建了一個類,然後在其中寫了幾個欄位,然後通常情況下我們需要手動去建立getter和setter方法啊,建構函式啊之類的,lombok的作用就是為了省去我們手動建立這些程式碼的麻煩,它能夠在我們編譯原始碼的時候自動幫我們生成這些方法。
lombok能夠達到的效果就是在原始碼中不需要寫一些通用的方法,但是在編譯生成的位元組碼檔案中會幫我們生成這些方法,這就是lombok的神奇作用。
雖然有人可能會說IDE裡面都自帶自動生成這些方法的功能,但是使用lombok會使你的程式碼看起來更加簡潔,寫起來也更加方便。
lombok安裝
lombok的安裝跟一般引用jar包沒有什麼區別,可以到官網上下載最新的jar包,然後匯入到專案裡面就好啦。
Maven新增依賴
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
</dependency>
</dependencies>
複製程式碼
Intellij idea開發的話需要安裝Lombok plugin,同時設定 Setting -> Compiler -> Annotation Processors -> Enable annotation processing勾選。
lombok使用
lombok使用過程中主要是靠註解起作用的,官網上的文件裡面有所有的註解,這裡不一一羅列,只說明其中幾個比較常用的。
@NonNull
: 可以幫助我們避免空指標。
使用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();
}
}
複製程式碼
@Cleanup
: 自動幫我們呼叫close()
方法。
使用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();
}
}
}
}
複製程式碼
@Getter / @Setter
: 自動生成Getter/Setter方法
使用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!
還有其他一些比如自動生成日誌物件等等之類的註解可以到官方網站去了解,就不一一列舉了。
掃描上方二維碼,關注公眾號,檢視獲取更多文章