Lombok
能以簡單的註解形式來簡化 java 代碼,提升開發人員的開發效率。例如開發中常常須要寫的 javabean
,都須要花時間去添加相應的 getter/setter
,也許還要去寫構造器
、equals
等方法,並且須要維護,當屬性多時會出現大量的 getter/setter
方法,這些顯得很冗長也沒有太多技術含量,一旦修改屬性,就容易出現忘記修改對應方法的失誤。html
Lombok
能經過註解的方式,在編譯時自動爲屬性生成構造器
、getter/setter
、equals
、hashcode
、toString
方法。出現的神奇就是在源碼中沒有 getter
和 setter
方法,可是在編譯生成的字節碼文件中有 getter
和 setter
方法。這樣就省去了手動重建這些代碼的麻煩,使代碼看起來更簡潔些。java
lombok
插件使用前須要安裝 lombok
插件bash
IDEA插件安裝地址maven
查看最新版本ui
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.6</version>
<scope>provided</scope>
</dependency>
</dependencies>
複製代碼
@Setter
@Getter
:能夠爲相應的屬性自動生成 Getter/Setter
方法。import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import java.util.Date;
@Setter
@Getter
@ToString
public class User {
private Integer id;
private String name;
private Integer age;
private String sex;
private Date birthday;
}
複製代碼
@NonNull
:該註解用在屬性或構造器上,Lombok
會生成一個非空的聲明,可用於校驗參數,能幫助避免空指針。import lombok.NonNull;
public class NonNullExample extends Something {
private String name;
public NonNullExample(@NonNull Person person) {
super("Hello");
this.name = person.getName();
}
}
複製代碼
@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);
}
}
}
複製代碼
@EqualsAndHashCode
:默認狀況下,會使用全部非靜態(non-static
)和非瞬態(non-transient
)屬性來生成 equals
和 hasCode
,也能經過 exclude
註解來排除一些屬性。import lombok.EqualsAndHashCode;
@EqualsAndHashCode(exclude={"id", "shape"})
public class EqualsAndHashCodeExample {
private transient int transientVar = 10;
private String name;
private double score;
private Shape shape = new Square(5, 10);
private String[] tags;
private int id;
public String getName() {
return this.name;
}
@EqualsAndHashCode(callSuper=true)
public static class Square extends Shape {
private final int width, height;
public Square(int width, int height) {
this.width = width;
this.height = height;
}
}
}
複製代碼
@ToString
:類使用 @ToString
註解,Lombok
會生成一個 toString()
方法,默認狀況下,會輸出類名、全部屬性(會按照屬性定義順序),用逗號來分割。代替效果爲:this
@Override
public String toString() {
return "Square(super=" + super.toString() + ", width=" + this.width + ", height=" + this.height + ")";
}
複製代碼
@Data
:註解在類上,會爲類的全部屬性自動生成 setter/getter
、equals
、canEqual
、hashCode
、toString
方法,如爲 final
屬性,則不會爲該屬性生成 setter
方法。這個註解但是說是很是強大。Lombok
本質上就是一個實現了「JSR 269 API」的程序。在使用 javac 的過程當中,它產生做用的具體流程以下:spa