Lombok注解之@SneakyThrows作用

Lombok注解之@SneakyThrows作用

在这里插入图片描述

读法

[ˈsniːki] [θroʊz]
悄悄的     抛出

顾名思义,它能够自动偷摸的为咱们的代码生成一个try…catch块,并把异常向上抛出来。

使用

@SneakyThrows的使用范围: 只能作用在方法和构造函数之上。从源码就可以看出。
在这里插入图片描述
SneakyThrows注解的原理主要涉及到Java的注解处理器和字节码操作。‌ Lombok通过自定义的注解处理器在编译时扫描源代码,‌并对带有@SneakyThrows注解的方法进行处理。‌处理的内容包括移除方法签名中的throws子句,‌并在方法体内部插入相应的字节码来包装和抛出异常。‌具体来说,‌Lombok生成的新方法与原方法具有相同的方法签名,‌但方法体内部会捕获所有可能抛出的受检查异常,‌将这些异常包装为一个新的未受检查异常(‌通常是RuntimeException或其子类)‌,‌然后抛出。‌这样,‌即使在方法签名中没有声明要抛出的异常,‌也能在运行时抛出任何类型的异常,‌从而绕过了Java类型系统对受检查异常的限制。‌

从实现细节上看,‌sneakyThrow方法利用泛型将传入的Throwable强制转换为RuntimeException。‌尽管这样做在源码中看起来像是将异常强制转换为RuntimeException,‌但实际上JVM并不关心泛型类型,‌泛型信息在编译成字节码时已经丢失。‌这种做法“骗过”了javac编译器,‌使得在运行时可以抛出任何类型的异常,‌而不需要在方法签名中声明它们。‌

总的来说,‌sneakyThrow注解通过修改字节码和利用Java类型擦除的特性,‌使得开发者可以在不违反Java语言规范的情况下,‌灵活地处理异常,‌提高了代码的可读性和简洁性。‌

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GaoJamie

您的鼓励将是我更新的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值