經(jīng)常用 @Data 注解標(biāo)記在實體類上面快速實現(xiàn)getter 和 setter, 而它好用地注解應(yīng)該不至于這一個,下面是常用的注解匯總:
1. @Data 注解 : 一般用在類上,提供類所有屬性的 get 和 set 方法,此外還提供了equals、canEqual、hashCode、toString等方法;
2. @Setter 注解:一般用在屬性上,為屬性提供 set 方法, 用在再類上則表示當(dāng)前類中所有屬性都生成set方法;
3. @Getter 注解:用在屬性上,為屬性提供 get 方法, 用在再類上表示當(dāng)前類中所有屬性都生成get方法;
4. @Log4j or @Slf4j 注解 :用在類上,為類提供一個 屬性名為log 的 log4j日志對象;
5. @NoArgsConstructor注解:用在類上,為類提供一個無參的構(gòu)造方法;
6. @AllArgsConstructor注解:用在類上,為類提供一個全參的構(gòu)造方法;
7. @RequiredArgsConstructor注解: 用在類上,生成一個包含 "特定參數(shù)" 的構(gòu)造器,特定參數(shù)指的是那些有加上 final 修飾詞的變量們;
8. @Builder注解: 用在類上,自動生成流式 set 值寫法,從此之后再也不用寫一堆 setter 了;

注意,雖然只要加上 @Builder 注解,我們就能夠用流式寫法快速設(shè)定對象的值,但是 setter 還是必須要寫不能省略的,因為 Spring 或是其他框架有很多地方都會用到對象的 getter/setter 對他們?nèi)≈?賦值所以通常是 @Data 和 @Builder 會一起用在同個類上,既方便我們流式寫代碼,也方便框架做事;
9. @Cleanup注解: 可以用在 IO 流上,用于關(guān)閉并釋放資源;
例如下面例子,每次IO流操作后要在finally中關(guān)閉流,釋放資源:
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();
}
}
}
}
類似以上的一個IO流操作的方法使用lombok 的 @Cleanup 注解后可以簡化成這樣:
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);
}
}
}
-
@SneakyThrows注解:利用了這一機(jī)制,將當(dāng)前方法拋出的異常,包裝成RuntimeException,騙過編譯器,使得調(diào)用點(diǎn)可以不用顯示處理異常信息,使用注解后不需要擔(dān)心Exception的處理。例如:
import lombok.SneakyThrows;
public class SneakyThrowsExample implements Runnable {
@SneakyThrows(UnsupportedEncodingException.class)
public String utf8ToString(byte[] bytes) {
return new String(bytes, "UTF-8");
}
@SneakyThrows
public void run() {
throw new Throwable();
}
}
真正生成的代碼
import lombok.Lombok;
public class SneakyThrowsExample implements Runnable {
public String utf8ToString(byte[] bytes) {
try {
return new String(bytes, "UTF-8");
} catch (UnsupportedEncodingException e) {
throw Lombok.sneakyThrow(e);
}
}
public void run() {
try {
throw new Throwable();
} catch (Throwable t) {
throw Lombok.sneakyThrow(t);
}
}
}