小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
关于@SneakyThrows注解的使用,主要是消除代码中异常处理代码.
1 异常引入
Java中异常Throwable分为两类, 一种是Exception类,称为受检异常(Checked Exception), 第二种是RuntimeException类, 运行时异常.
Exception类异常,强制要求方法抛出可能出现的异常,调用者必须处理这个异常. 一般在代码中,程序员通过捕获异常,再包一层RuntimeException,向外抛出.(常见如Spring源码中)
2 @SneakyThrows
1 SneakyThrows注解的源码
1 | java复制代码@Target({ElementType.METHOD, ElementType.CONSTRUCTOR}) |
2使用案例
1 | java复制代码public class SneakyThrowDemo { |
其中Lombok.sneakyThrow()方法
1 | java复制代码 /** |
整个处理过程中, 最重要的是throw (T)t
, 使用泛型,将传入的Throwable强转为RuntimeException异常.
虽然, 我们抛出的异常不是RuntimeException,但是可以骗过javac编译器,泛型最后存储为字节码文件时并没有泛型信息.
本文转载自: 掘金