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

相关文章

Django开发时如何避免频繁发送短信验证码(python图文代码)

《Django开发时如何避免频繁发送短信验证码(python图文代码)》Django开发时,为防止频繁发送验证码,后端需用Redis限制请求频率,结合管道技术提升效率,通过生产者消费者模式解耦业务逻辑... 目录避免频繁发送 验证码1. www.chinasem.cn避免频繁发送 验证码逻辑分析2. 避免频繁

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

Python使用Tenacity一行代码实现自动重试详解

《Python使用Tenacity一行代码实现自动重试详解》tenacity是一个专为Python设计的通用重试库,它的核心理念就是用简单、清晰的方式,为任何可能失败的操作添加重试能力,下面我们就来看... 目录一切始于一个简单的 API 调用Tenacity 入门:一行代码实现优雅重试精细控制:让重试按我

C语言中%zu的用法解读

《C语言中%zu的用法解读》size_t是无符号整数类型,用于表示对象大小或内存操作结果,%zu是C99标准中专为size_t设计的printf占位符,避免因类型不匹配导致错误,使用%u或%d可能引发... 目录size_t 类型与 %zu 占位符%zu 的用途替代占位符的风险兼容性说明其他相关占位符验证示

MySQL中EXISTS与IN用法使用与对比分析

《MySQL中EXISTS与IN用法使用与对比分析》在MySQL中,EXISTS和IN都用于子查询中根据另一个查询的结果来过滤主查询的记录,本文将基于工作原理、效率和应用场景进行全面对比... 目录一、基本用法详解1. IN 运算符2. EXISTS 运算符二、EXISTS 与 IN 的选择策略三、性能对比

全面解析Golang 中的 Gorilla CORS 中间件正确用法

《全面解析Golang中的GorillaCORS中间件正确用法》Golang中使用gorilla/mux路由器配合rs/cors中间件库可以优雅地解决这个问题,然而,很多人刚开始使用时会遇到配... 目录如何让 golang 中的 Gorilla CORS 中间件正确工作一、基础依赖二、错误用法(很多人一开

Java Stream流之GroupBy的用法及应用场景

《JavaStream流之GroupBy的用法及应用场景》本教程将详细介绍如何在Java中使用Stream流的groupby方法,包括基本用法和一些常见的实际应用场景,感兴趣的朋友一起看看吧... 目录Java Stream流之GroupBy的用法1. 前言2. 基础概念什么是 GroupBy?Stream

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

详解MySQL中JSON数据类型用法及与传统JSON字符串对比

《详解MySQL中JSON数据类型用法及与传统JSON字符串对比》MySQL从5.7版本开始引入了JSON数据类型,专门用于存储JSON格式的数据,本文将为大家简单介绍一下MySQL中JSON数据类型... 目录前言基本用法jsON数据类型 vs 传统JSON字符串1. 存储方式2. 查询方式对比3. 索引

Python实现MQTT通信的示例代码

《Python实现MQTT通信的示例代码》本文主要介绍了Python实现MQTT通信的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一... 目录1. 安装paho-mqtt库‌2. 搭建MQTT代理服务器(Broker)‌‌3. pytho