zoukankan      html  css  js  c++  java
  • 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;
        }
    

  • 相关阅读:
    嵌套循环td时补齐td的解决方法
    [web.aspNet]vs2005无法断点调试网站,断点失效 IE8 vss6.0
    使IE6下PNG背景透明的七种方法任你选
    VBA之Range对象在Excel单元格赋值示例
    css控制透明度
    SQL2000中用backup 备份数据库
    软件开发人才级别划分
    sql server事务全攻略(转载)
    程序员不是神,心态决定一切
    一个真正合格程序员的七种素质
  • 原文地址:https://www.cnblogs.com/lori/p/13631931.html
Copyright © 2011-2022 走看看