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;
        }
    

  • 相关阅读:
    Linux下压缩解压缩命令
    Linux挂载外部设备
    Ubuntu下安装软件的三种方式
    Linux查看和修改文件权限
    Linux命令行基础操作
    window下常用的cmd命令
    圆角进度条,带数字居中显示的圆角进度条
    上下滑动控件
    window下Jekyll+github搭建自己的博客
    PAT 团体程序设计天梯赛 L1-046 整除光棍(模拟除法)
  • 原文地址:https://www.cnblogs.com/lori/p/13631931.html
Copyright © 2011-2022 走看看