当前位置: 首页 > news >正文

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语言规范的情况下,‌灵活地处理异常,‌提高了代码的可读性和简洁性。‌

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • Spark实时(六):Output Sinks案例演示
  • 深入理解 Redis 批量操作和事务机制:从原理到 Spring Data Redis 实践
  • 解决WordPress文章引用的图片不显示问题
  • 源/目的检查开启导致虚拟IP背后的LVS无法正常访问
  • GEE数据:Sentinel-2数据更新新增两个云和雪波段(MSK_CLDPRB和MSK_SNWPRB)
  • 从0开始的HarmonyOS NEXT —— 认识基础架构到hello world页面添加(第一章)
  • 「数组」C++STL库vector(动态数组|向量)全部函数介绍
  • 二进制部署k8s集群之master节点和etcd数据库集群(上)
  • Redis#架构师面试题
  • node+mysql+layui+ejs实现左侧导航栏菜单动态显示
  • STM32 | 看门狗IWDG喂狗实战
  • ChatGPT秘籍:如何用AI阅读文献,提升你的学术效率
  • 计算机基础(day1)
  • dpdk发送udp报文
  • Linux常用工具
  • [ JavaScript ] 数据结构与算法 —— 链表
  • 《深入 React 技术栈》
  • 【刷算法】求1+2+3+...+n
  • ES6 学习笔记(一)let,const和解构赋值
  • input实现文字超出省略号功能
  • javascript 总结(常用工具类的封装)
  • java第三方包学习之lombok
  • Java教程_软件开发基础
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • Markdown 语法简单说明
  • node-glob通配符
  • Spring Boot MyBatis配置多种数据库
  • Vue全家桶实现一个Web App
  • 给自己的博客网站加上酷炫的初音未来音乐游戏?
  • 基于OpenResty的Lua Web框架lor0.0.2预览版发布
  • 聊聊redis的数据结构的应用
  • 前端代码风格自动化系列(二)之Commitlint
  • 前端工程化(Gulp、Webpack)-webpack
  • 浅谈Golang中select的用法
  • 算法系列——算法入门之递归分而治之思想的实现
  • 系统认识JavaScript正则表达式
  • 学习使用ExpressJS 4.0中的新Router
  • 硬币翻转问题,区间操作
  • 原生 js 实现移动端 Touch 滑动反弹
  • ​如何在iOS手机上查看应用日志
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (C++20) consteval立即函数
  • (c语言)strcpy函数用法
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (zz)子曾经曰过:先有司,赦小过,举贤才
  • (动手学习深度学习)第13章 计算机视觉---微调
  • (二) 初入MySQL 【数据库管理】
  • (二)测试工具
  • (六)c52学习之旅-独立按键
  • (亲测)设​置​m​y​e​c​l​i​p​s​e​打​开​默​认​工​作​空​间...
  • (数位dp) 算法竞赛入门到进阶 书本题集
  • (淘宝无限适配)手机端rem布局详解(转载非原创)
  • (转载)利用webkit抓取动态网页和链接
  • .gitignore文件—git忽略文件
  • .net Application的目录