Lombok 常用注解

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

image.png

注意,雖然只要加上 @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);
        }
    }
}
  1. @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);
    }
  }
}
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容