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

  • 相关阅读:
    tabsGif
    this.$refs.tabs.activeKey ref就是vue里面的id
    @click.native 会触发原生 click事件 vue
    Web Server Notifier 是chrome网上商店的一个插件
    autoOpenBrowser: true, 运行npm后自动打开浏览器
    总结vue2.0 配置的实例方法
    chrome 打开上次关闭的tab ctrl+shift+T
    动态菜单路由
    gitee 如何创建仓库 及发布
    小白接口
  • 原文地址:https://www.cnblogs.com/lori/p/13631931.html
Copyright © 2011-2022 走看看