lombok~@SneakyThrows注解让代码更优雅

2024-02-16 11:40

本文主要是介绍lombok~@SneakyThrows注解让代码更优雅,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

我们知道,java里的异常分为Exception和RuntimeException两大类,RuntimeException异常会由运行时帮我们进行捕获,统一进行处理;而Exception异常是受检异常(Checked Exception),需要我们自己在代码里显示的声明和处理。
RuntimeException异常的代表

  • llegalArgumentException
  • IllegalAnnotationException
  • EncodingException

Exception的代表

  • IOException
  • IllegalBlockSizeException
  • GeneralSecurityException
  • IllegalAccessException

问题表现

在一个类中,定义两个方法a和b,b方法会声明throws IOException,a方法里面在调用b方法里,也需要对这个IOException进行处理,这时IDE会提升我们,需要显示的实现这个异常的捕获。
[图片上传失败...(image-3743c0-1650882766284)]

如下面和图所示,你有三种选择,添加throws,添加lombok @SneakyThrows注解,以及添加try…catch等
[图片上传失败...(image-3baf49-1650882766283)]

第一种,代码变成这样

   public void a() throws IOException {b();}

第二种,代码变成这样

        @SneakyThrowspublic void a() {b();}

第三种,代码就是传统的try…catch了

public void a() {try {b();} catch (IOException e) {e.printStackTrace();}}

从上面三段代码来说,无疑lombok封装的@SneakyThrows代码最为简洁,添加它之后,IDE的警告就没有了,它实际是把Exception伪装成了RuntimeException,把JVM给欺骗了。

下面代码选自sneakyThrow的实现,它将我们的异常强转成了RuntimeException异常,编译器一看它不是Exception异常,所以警告信息也就没了。

   public static RuntimeException sneakyThrow(Throwable t) {if (t == null) throw new NullPointerException("t");return Lombok.<RuntimeException>sneakyThrow0(t);}private static <T extends Throwable> T sneakyThrow0(Throwable t) throws T {throw (T)t;}

最近整理了一系列的Java面试题,包含了Java基础、进阶、多线程、并发编程、数据库(MySQL、Redis、MongoDB、Memcachedd等等)、Spring全家桶、MyBatis、ZooKeeper、Dubbo、Elasticsearch、RabbitMQ、Kafka、Linux、Netty、Tomcat以及阿里、腾讯、字节、百度等大厂的面试真题,另外可以微信搜索539413949获取我为大家准备的资料

这篇关于lombok~@SneakyThrows注解让代码更优雅的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java并发编程之如何优雅关闭钩子Shutdown Hook

《Java并发编程之如何优雅关闭钩子ShutdownHook》这篇文章主要为大家详细介绍了Java如何实现优雅关闭钩子ShutdownHook,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起... 目录关闭钩子简介关闭钩子应用场景数据库连接实战演示使用关闭钩子的注意事项开源框架中的关闭钩子机制1.

Java 中的 @SneakyThrows 注解使用方法(简化异常处理的利与弊)

《Java中的@SneakyThrows注解使用方法(简化异常处理的利与弊)》为了简化异常处理,Lombok提供了一个强大的注解@SneakyThrows,本文将详细介绍@SneakyThro... 目录1. @SneakyThrows 简介 1.1 什么是 Lombok?2. @SneakyThrows

Java Spring 中 @PostConstruct 注解使用原理及常见场景

《JavaSpring中@PostConstruct注解使用原理及常见场景》在JavaSpring中,@PostConstruct注解是一个非常实用的功能,它允许开发者在Spring容器完全初... 目录一、@PostConstruct 注解概述二、@PostConstruct 注解的基本使用2.1 基本代

Spring Boot中JSON数值溢出问题从报错到优雅解决办法

《SpringBoot中JSON数值溢出问题从报错到优雅解决办法》:本文主要介绍SpringBoot中JSON数值溢出问题从报错到优雅的解决办法,通过修改字段类型为Long、添加全局异常处理和... 目录一、问题背景:为什么我的接口突然报错了?二、为什么会发生这个错误?1. Java 数据类型的“容量”限制

利用Python调试串口的示例代码

《利用Python调试串口的示例代码》在嵌入式开发、物联网设备调试过程中,串口通信是最基础的调试手段本文将带你用Python+ttkbootstrap打造一款高颜值、多功能的串口调试助手,需要的可以了... 目录概述:为什么需要专业的串口调试工具项目架构设计1.1 技术栈选型1.2 关键类说明1.3 线程模

Python Transformers库(NLP处理库)案例代码讲解

《PythonTransformers库(NLP处理库)案例代码讲解》本文介绍transformers库的全面讲解,包含基础知识、高级用法、案例代码及学习路径,内容经过组织,适合不同阶段的学习者,对... 目录一、基础知识1. Transformers 库简介2. 安装与环境配置3. 快速上手示例二、核心模

Java中的@SneakyThrows注解用法详解

《Java中的@SneakyThrows注解用法详解》:本文主要介绍Java中的@SneakyThrows注解用法的相关资料,Lombok的@SneakyThrows注解简化了Java方法中的异常... 目录前言一、@SneakyThrows 简介1.1 什么是 Lombok?二、@SneakyThrows

Java的栈与队列实现代码解析

《Java的栈与队列实现代码解析》栈是常见的线性数据结构,栈的特点是以先进后出的形式,后进先出,先进后出,分为栈底和栈顶,栈应用于内存的分配,表达式求值,存储临时的数据和方法的调用等,本文给大家介绍J... 目录栈的概念(Stack)栈的实现代码队列(Queue)模拟实现队列(双链表实现)循环队列(循环数组

Java实现优雅日期处理的方案详解

《Java实现优雅日期处理的方案详解》在我们的日常工作中,需要经常处理各种格式,各种类似的的日期或者时间,下面我们就来看看如何使用java处理这样的日期问题吧,感兴趣的小伙伴可以跟随小编一起学习一下... 目录前言一、日期的坑1.1 日期格式化陷阱1.2 时区转换二、优雅方案的进阶之路2.1 线程安全重构2

使用Python实现一个优雅的异步定时器

《使用Python实现一个优雅的异步定时器》在Python中实现定时器功能是一个常见需求,尤其是在需要周期性执行任务的场景下,本文给大家介绍了基于asyncio和threading模块,可扩展的异步定... 目录需求背景代码1. 单例事件循环的实现2. 事件循环的运行与关闭3. 定时器核心逻辑4. 启动与停