Lombok注解@SneakyThrows的作用

Lombok库中的一个注解,它可以用于处理检查型异常。在Java中,有两种类型的异常:检查型异常(Checked Exceptions)和非检查型异常(Unchecked Exceptions)。检查型异常需要明确的被捕获或者抛出,而非检查型异常则不需要。

使用范围: 只能作用在方法和构造函数之上

在编写代码时,如果你不想因为某个检查型异常而在方法中添加throws声明或者使用try-catch语句,那么你可以使用@SneakyThrows注解。这个注解会自动地为你的代码添加必要的try-catch语句,从而使你的代码看起来更加简洁。

弊端:@SneakyThrows应该谨慎使用,因为它可能会隐藏潜在的问题,使得[异常处理](https://so.csdn.net/so/search?q=异常处理&spm=1001.2101.3001.7020)变得更加困难。在某些情况下,显式地处理异常可能是更好的选择。

原理:利用泛型将我们传入的Throwable强转为RuntimeException。泛型最后存储为字节码时并没有泛型的信息。这样写只是为了骗过javac编译器。

public static RuntimeException sneakyThrow(Throwable t) {
if (t == null) throw new NullPointerException("t");
return Lombok.sneakyThrow0(t);
}

private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T {
    throw (T)t;
}
posted @ 2024-04-26 17:01  chillymint  阅读(902)  评论(0)    收藏  举报