lombok~@SneakyThrows注解让代码更优雅

lombok~@SneakyThrows注解让代码更优雅,第1张

我们知道,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会提升我们,需要显示的实现这个异常的捕获。

如下面和图所示,你有三种选择,添加throws,添加lombok @SneakyThrows注解,以及添加try…catch等

第一种,代码变成这样

   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.sneakyThrow0(t);
    }

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

最近整理了一系列的Java面试题,包含了Java基础、进阶、多线程、并发编程、数据库(MySQL、Redis、MongoDB、Memcachedd等等)、Spring全家桶、MyBatis、ZooKeeper、Dubbo、Elasticsearch、RabbitMQ、Kafka、Linux、Netty、Tomcat以及阿里、腾讯、字节、百度等大厂的面试真题,另外可以微信搜索539413949获取我为大家准备的资料

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/758097.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-01
下一篇2022-05-01

发表评论

登录后才能评论

评论列表(0条)

    保存