lombok的SneakyThrows究竟还原成什么代码、它的用法

2024-02-16 11:40

本文主要是介绍lombok的SneakyThrows究竟还原成什么代码、它的用法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

背景

@SneakyThrows 这个 lombok 的注解背后,对应的实际代码是什么样?

这个注解可以放在方法上(含静态)或构造方法上

作用:其实就是用 try-catch 将方法的代码包起来。用 Throwable 接收(可以接住一切),并抛出

1、可用于:构造方法、普通方法、静态方法。不可放在类里。

2、它是使用 Throwable 作为 catch 的参数 (而不是Exception),所以不用担心有catch不到的

3、并不是像他的名字 “sneaky” 一样偷偷地catch住异常并吞掉,还是会抛出来的,放心。

4、它有点奇怪,用不了 IDEA 的 refactor 得到 delombok 结果 (见附录)

附录

1、这里列出了使用 @SneakyThrows其实际的源码是什么
package com.wyf.test.junittestcoverage.main;import lombok.SneakyThrows;import java.io.FileInputStream;public class Test {// 构造器:运行时异常@SneakyThrowspublic Test() {int i = 7 / 0;}// 构造器:已检查异常(即会强迫你处理的)@SneakyThrowspublic Test(int i) {FileInputStream fis = new FileInputStream("/在构造方法里写这个/");}// 普通方法:运行时异常@SneakyThrowspublic void testRuntimeException() {int i = 8 / 0;}// 普通方法:已检查异常@SneakyThrowspublic void testCheckedException() {FileInputStream fis = new FileInputStream("/在普通方法里写的这个方法/");}// 静态方法:运行时异常@SneakyThrowspublic static void testRuntimeException2() {int i = 9 / 0;}// 静态方法:已检查异常@SneakyThrowspublic static void testCheckedException2() {FileInputStream fis = new FileInputStream("/在静态方法里写的这个方法/");}
}

通过其class反编译,得到上述使用了lombok注解的源码等价于不使用注解后什么样的源码

//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
//package com.wyf.test.junittestcoverage.main;import java.io.FileInputStream;public class Test {public Test() {try {int var1 = 7 / 0;} catch (Throwable var2) {throw var2;}}public Test(int i) {try {new FileInputStream("/在构造方法里写这个/");} catch (Throwable var3) {throw var3;}}public void testRuntimeException() {try {int var1 = 8 / 0;} catch (Throwable var2) {throw var2;}}public void testCheckedException() {try {new FileInputStream("/在普通方法里写的这个方法/");} catch (Throwable var2) {throw var2;}}public static void testRuntimeException2() {try {int var0 = 9 / 0;} catch (Throwable var1) {throw var1;}}public static void testCheckedException2() {try {new FileInputStream("/在静态方法里写的这个方法/");} catch (Throwable var1) {throw var1;}}
}
关于使用 Delombok 得到lombok注解,在@SneakyThrows上失效

我们一直都可以使用IDEA提供的Delombok功能得到你写的lombok注解等价于什么代码,但是对于@SneakyThrows似乎失效。原因未知。
在这里插入图片描述

即使能 Delombok,但是,@SneakyThrows 却还是不能,如下图

在这里插入图片描述

在这里插入图片描述

这篇关于lombok的SneakyThrows究竟还原成什么代码、它的用法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/714425

相关文章

C#实现千万数据秒级导入的代码

《C#实现千万数据秒级导入的代码》在实际开发中excel导入很常见,现代社会中很容易遇到大数据处理业务,所以本文我就给大家分享一下千万数据秒级导入怎么实现,文中有详细的代码示例供大家参考,需要的朋友可... 目录前言一、数据存储二、处理逻辑优化前代码处理逻辑优化后的代码总结前言在实际开发中excel导入很

SpringBoot+RustFS 实现文件切片极速上传的实例代码

《SpringBoot+RustFS实现文件切片极速上传的实例代码》本文介绍利用SpringBoot和RustFS构建高性能文件切片上传系统,实现大文件秒传、断点续传和分片上传等功能,具有一定的参考... 目录一、为什么选择 RustFS + SpringBoot?二、环境准备与部署2.1 安装 RustF

Python实现Excel批量样式修改器(附完整代码)

《Python实现Excel批量样式修改器(附完整代码)》这篇文章主要为大家详细介绍了如何使用Python实现一个Excel批量样式修改器,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录前言功能特性核心功能界面特性系统要求安装说明使用指南基本操作流程高级功能技术实现核心技术栈关键函

Python中logging模块用法示例总结

《Python中logging模块用法示例总结》在Python中logging模块是一个强大的日志记录工具,它允许用户将程序运行期间产生的日志信息输出到控制台或者写入到文件中,:本文主要介绍Pyt... 目录前言一. 基本使用1. 五种日志等级2.  设置报告等级3. 自定义格式4. C语言风格的格式化方法

SpringBoot 获取请求参数的常用注解及用法

《SpringBoot获取请求参数的常用注解及用法》SpringBoot通过@RequestParam、@PathVariable等注解支持从HTTP请求中获取参数,涵盖查询、路径、请求体、头、C... 目录SpringBoot 提供了多种注解来方便地从 HTTP 请求中获取参数以下是主要的注解及其用法:1

Redis实现高效内存管理的示例代码

《Redis实现高效内存管理的示例代码》Redis内存管理是其核心功能之一,为了高效地利用内存,Redis采用了多种技术和策略,如优化的数据结构、内存分配策略、内存回收、数据压缩等,下面就来详细的介绍... 目录1. 内存分配策略jemalloc 的使用2. 数据压缩和编码ziplist示例代码3. 优化的

Python 基于http.server模块实现简单http服务的代码举例

《Python基于http.server模块实现简单http服务的代码举例》Pythonhttp.server模块通过继承BaseHTTPRequestHandler处理HTTP请求,使用Threa... 目录测试环境代码实现相关介绍模块简介类及相关函数简介参考链接测试环境win11专业版python

Java中HashMap的用法详细介绍

《Java中HashMap的用法详细介绍》JavaHashMap是一种高效的数据结构,用于存储键值对,它是基于哈希表实现的,提供快速的插入、删除和查找操作,:本文主要介绍Java中HashMap... 目录一.HashMap1.基本概念2.底层数据结构:3.HashCode和equals方法为什么重写Has

Python从Word文档中提取图片并生成PPT的操作代码

《Python从Word文档中提取图片并生成PPT的操作代码》在日常办公场景中,我们经常需要从Word文档中提取图片,并将这些图片整理到PowerPoint幻灯片中,手动完成这一任务既耗时又容易出错,... 目录引言背景与需求解决方案概述代码解析代码核心逻辑说明总结引言在日常办公场景中,我们经常需要从 W

Android协程高级用法大全

《Android协程高级用法大全》这篇文章给大家介绍Android协程高级用法大全,本文结合实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友跟随小编一起学习吧... 目录1️⃣ 协程作用域(CoroutineScope)与生命周期绑定Activity/Fragment 中手