lombok~@SneakyThrows注解讓代碼更優雅


我們知道,java里的異常分為Exception和RuntimeException兩大類,RuntimeException異常會由運行時幫我們進行捕獲,統一進行處理;而Exception異常是受檢異常(Checked Exception),需要我們自己在代碼里顯示的聲明和處理。
RuntimeException異常的代表

  • llegalArgumentException
  • IllegalAnnotationException
  • EncodingException

Exception的代表

  • IOException
  • IllegalBlockSizeException
  • GeneralSecurityException
  • IllegalAccessException

問題表現

在一個類中,定義兩個方法a和b,b方法會聲明throws IOException,a方法里面在調用b方法里,也需要對這個IOException進行處理,這時IDE會提升我們,需要顯示的實現這個異常的捕獲。
1
如下面和圖所示,你有三種選擇,添加throws,添加lombok @SneakyThrows注解,以及添加try...catch等
2
第一種,代碼變成這樣

   public void a() throws IOException {
            b();
        }

第二種,代碼變成這樣

        @SneakyThrows
        public void a() {
            b();
        }

第三種,代碼就是傳統的try...catch了

public void a() {
        try {
          b();
      } catch (IOException e) {
          e.printStackTrace();
      }
  }

從上面三段代碼來說,無疑lombok封裝的@SneakyThrows代碼最為簡潔,添加它之后,IDE的警告就沒有了,它實際是把Exception偽裝成了RuntimeException,把JVM給欺騙了。

下面代碼選自sneakyThrow的實現,它將我們的異常強轉成了RuntimeException異常,編譯器一看它不是Exception異常,所以警告信息也就沒了。

   public static RuntimeException sneakyThrow(Throwable t) {
        if (t == null) throw new NullPointerException("t");
        return Lombok.<RuntimeException>sneakyThrow0(t);
    }

    private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T {
        throw (T)t;
    }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM