1、lombok簡介html
lombok是在學習過程當中發現的一個很是好用的小工具,用了以後感受的確很不錯,因此特此來推薦一下。java
lombok的官方地址:https://projectlombok.org/git
lombok的Github地址:https://github.com/rzwitserlo...github
那麼lombok究竟是個什麼呢,lombok是一個能夠經過簡單的註解的形式來幫助咱們簡化消除一些必須有但顯得很臃腫的 Java 代碼的工具,簡單來講,好比咱們新建了一個類,而後在其中寫了幾個字段,而後一般狀況下咱們須要手動去創建getter和setter方法啊,構造函數啊之類的,lombok的做用就是爲了省去咱們手動建立這些代碼的麻煩,它可以在咱們編譯源碼的時候自動幫咱們生成這些方法。ide
lombok可以達到的效果就是在源碼中不須要寫一些通用的方法,可是在編譯生成的字節碼文件中會幫咱們生成這些方法,這就是lombok的神奇做用。函數
雖然有人可能會說IDE裏面都自帶自動生成這些方法的功能,可是使用lombok會使你的代碼看起來更加簡潔,寫起來也更加方便。工具
2、lombok安裝學習
lombok的安裝跟通常引用jar包沒有什麼區別,能夠到官網上下載最新的jar包,而後導入到項目裏面就好啦。網站
Maven添加依賴ui
<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勾選。
3、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!
還有其餘一些好比自動生成日誌對象等等之類的註解能夠到官方網站去了解,就不一一列舉了。