Guava使用之Throwables异常简化、错误传播和检查

【学习笔记-QGIS】 QGIS从零快速上手 安装文章参考:https://zhuanlan.zhihu.com/p/370633306。 阅读详情

任何人都不敢说自己的代码没有bug,所以程序抛异常是再经常不过的事情,有时候,你会想把捕获的exception抛到上一个try/catch块。对于 RuntimeException 和 Error 尤为如此,它们不需要try/catch 块,但可能被其他的 try/catch 块无意捕获。

你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeException

Guava提供了若干方法,来判断异常类型并且重新传播异常。例如:

try {
    someMethodThatCouldThrowAnything();
} catch (IKnowWhatToDoWithThisException e) {
   handle(e);
} catch (Throwable t) {
   Throwables.propagateIfInstanceOf(t, IOException.class);
   Throwables.propagateIfInstanceOf(t, SQLException.class);
   throw Throwables.propagate(t);
}

所有这些方法都会自己决定是否要抛出异常,但也能直接抛出方法返回的结果例如:throw Throwables.propagate(t); 这样可以向编译器声明这里一定会抛出异常

Guava中的异常传播方法简要列举如下:

方法说明
RuntimeException propagate(Throwable)如果Throwable是Error或RuntimeException,直接抛出;否则把Throwable包装成RuntimeException抛出。返回类型是RuntimeException,所以你可以像上面说的那样写成throw Throwables.propagate(t),Java编译器会意识到这行代码保证抛出异常。
void propagateIfInstanceOf( Throwable, Class) throws XThrowable类型为X才抛出
void propagateIfPossible( Throwable)Throwable类型为Error或RuntimeException才抛出
void propagateIfPossible( Throwable, Class) throws XThrowable类型为X, Error或RuntimeException才抛出

下面主要说明一下Throwables.propagate的用法
通常来说,如果调用者想让异常传播到栈顶,他不需要写任何catch代码块。因为他不打算从异常中恢复,他可能就不应该记录异常,或者有其他的动作。他可能是想做一些清理工作,但通常来说,无论操作是否成功,清理工作都要进行,所以清理工作可能会放在finallly代码块中。但有时候,捕获异常然后再抛出也是有用的:也许调用者想要在异常传播之前统计失败的次数,或者有条件地传播异常。

当只对一种异常进行捕获和再抛出时,代码可能还是简单明了的。但当多种异常需要处理时,却可能变得一团糟:

@Override
public void run() {
try {
        delegate.run();
    } catch (RuntimeException e) {
        failures.increment();
        throw e;
    }catch (Error e) {
        failures.increment();
        throw e;
    }
}
FastApi教程 HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于万维网(WWW:World Wide Web )服务器与本地浏览器之间传输超文本的传送协议。HTTP是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展。HTTP协议工作于客户端-服务端架构为上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。 阅读详情

相关推荐

微带功分器设计与ADS-EM联合仿真实战解析

本文详细解析了微带功分器设计与ADS-EM联合仿真的实战技巧,涵盖特性阻抗计算、ADS原理图设计、版图生成与EM仿真等关键步骤。通过实际案例分享,帮助工程师掌握射频电路设计中的核心技术和调试方法,提升功分器设计效率与性能。

weixin_29280219的博客 449

【Java技术专题】「Guava开发指南」手把手教你如何进行使用Guava工具箱进行开发系统实战指南(简化异常和错误的传播与检查)

受检查异常是指在方法声明中必须声明抛出的异常,而非受检查异常则是指在方法声明中不需要声明抛出的异常。受检查异常必须在方法内部进行处理,否则编译时会报错,而非受检查异常则可以不进行处理,但是如果不进行处理,程序会抛出运行时异常并终止执行。受检查异常一般是由 I/O 操作、网络操作等可能会出现异常的操作所引发的,而非受检查异常则是由程序错误或者逻辑错误所引发的。实际上,手动包装可能更好:如果你手动包装了所有异常(而不仅仅是受检异常),那你就可以在另一端解包所有异常,并处理极少数特殊场景。

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。 462

基于JavaFX的Http Server模拟器

源码地址 GitHub - DayRain/http-server-simulator: http server 模拟器 功能描述 HttpServer模拟器,通过简单的配置即可模拟第三方服务端,用于接收和响应HTTP请求。 支持同时模拟多个服务、动态添加接口、动态配置返回值。 使用说明 运行 exe运行 编译代码后,点击exe直接运行 代码运行 下载好代码后,运行主类ApplicationStarter即可 新建服务 主界面如下 点击 文件-新建 创建新的服务 ...

小楼夜听雨的博客 2534

Guava学习之Basic Utilities——Throwables

Throwables Guava's Throwables 工具可以轻松的解决exceptions问题。 Propagation 有时,当你catch 到一个异常,但是你想将其抛给下一个try/catch块。 通常RuntimeException 或 Error实例不需要try/catch,但是如果你没有准备捕获它们时,会被try/catch所捕获。 Guava 提供一系列的工作使得程序...

yshuoo的博客 498

Transformers 中的 Softmax 可以并行加速么?

通过融合前两个计算步骤,降低执行Reduce_max和Reduce_sum等操作的通信开销。利用共享内存来存储临时数据,以减少对全局内存的访问成本。

stephen147的博客 1234

3D打印必备:如何用Blender将NWD文件转成STL(附精度调整技巧)

本文详细介绍了如何使用Blender将NWD文件转换为STL格式,特别针对3D打印需求提供了精度调整技巧。从环境准备到分步转换流程,再到3D打印专属优化策略,帮助设计师解决破面、尺寸偏差等常见问题,实现高效、精准的格式转换。

week9的博客 272

Java异常处理神器:Guava Throwables类

来源|juejin.cn/post/7313911078114787380???? 欢迎加入小哈的星球,你将获得:专属的项目实战 / Java 学习路线 /一对一提问 / 学习打卡 / 赠书福利全栈前后端分离博客项目 1.0 版本完结啦,2.0 正在更新中...,演示链接:http://116.62.199.48/,全程手摸手,后端 + 前端全栈开发,从 0 到 1 讲解每个功能点开发步骤,...

犬小哈 150

BERTopic模型入门教程(附代码+参数调节)

BERTopic 是一种用于从文本数据中提取主题模型的新型方法。通过结合 BERT嵌入和传统的主题模型来生成语义丰富的主题。传统的主题模型(如LDA)主要依赖于词频矩阵,而 BERTopic 通过预训练语言模型生成高维语义嵌入来捕捉词语间的复杂关系,因此可以更好地处理上下文信息。BERTopic模型可以看作是创建其主题表示的一系列步骤。核心原理如下:就本质而言,BERTopic就是一个拼装框架,可以把每部分都替换成其他模型,只要完成任务即可。

m0_52069102的博客 1万+

[Guava]Throwables:简化异常和错误的传播与检查

1. 异常传播有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在 Error 或 RuntimeException 被捕获的时候,你没想捕获它们,但是声明捕获 Throwable 和 Exception 的时候,也包括了了 Error 或 RuntimeException。Guava 提供了若干方法,来判断异常类型并且重新传播异常。例如:try { someMethodThatCou

SmartSi 1966

DeepSeek + 微信:手把手教你把 AI 接入个人微信,秒变“高情商”聊天助手(防封指南)

将 DeepSeek 接入微信,本质上是给你的微信装了一个**“最强外挂”**。它不仅能帮你回消息,还能帮你写周报、查资料、甚至陪聊解闷。工具是服务于人的,不要让 AI 完全替代了你的真情实感。毕竟,真正的高情商,是屏幕背后那个在乎对方的你。先申请一个小号,按照步骤跑通流程。然后试着调整 Prompt,训练一个属于你自己的“嘴替”吧!

BUG猿的博客 957

一个严谨的STM32串口DMA发送&接收(1.5Mbps波特率)机制

本文描述串口DMA收/发机制设计,及STM32串口DMA收/发实现。

只要思想不滑坡,想法总比问题多。 5万+

[Google Guava] 1.5-Throwables:简化异常和错误的传播与检查

[Google Guava] 1.5-Throwables:简化异常和错误的传播与检查 原文链接 译者: 沈义扬 异常传播 有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在Error或RuntimeException被捕获的时候,你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeException。Guava提供

一个Java菜鸟(同微信公众号) 773

AI Agent智能体在Android开发中的应用

本文探讨了AIAgent(智能代理体)在Android开发中的应用,涵盖技术原理、实践案例与未来趋势。AIAgent通过机器学习、自然语言处理等技术实现代码生成、测试自动化及性能优化,显著提升开发效率。例如,强化学习模型可优化APP响应时间(公式:$\text{响应时间}=f(\text{负载},\text{资源})$),自动化测试覆盖率提升至95%。

郑伟强dev的专栏 122

Guava 1.5-Throwables:简化异常和错误的传播与检查

异常传播 有时候,你会想把捕获到的异常再次抛出。这种情况通常发生在Error或RuntimeException被捕获的时候,你没想捕获它们,但是声明捕获Throwable和Exception的时候,也包括了了Error或RuntimeException。Guava提供了若干方法,来判断异常类型并且重新传播异常。例如: try { someMethodThatCouldThrowAny...

weixin_30549657的博客 88

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

GoogleGuava - 第 1 章 基本工具——Throwables:简化异常和错误的传播与检查

834

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

异常传播 Throwables 类 - Google Guava

一、Throwables 类简介 Throwable 类,简化异常和错误的传播与检查 二、常用方法 官方文档:https://google.github.io/guava/releases/27.0.1-jre/api/docs/com/google/common/base/Throwables.html 方法类型 方法描述 static List<Throwable> getCausalChain(Throwable throwable) 获取一..

程序员咏哥的博客 820

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

Guava处理异常

guava处理异常

usa_washington的博客 1374

Dokku 卸载完全指南:Arch / Debian / Makefile 三种安装方式的卸载与系统清理

Dokku 是一款基于 Docker 的轻量级 PaaS,用于在单台服务器上构建并管理应用的生命周期。无论你是迁移平台、释放服务器资源,还是重建环境,都需要干净、彻底地移除 Dokku 及其部署的所有应用。本文以仓库中 [docs/getting-started/uninstalling.md](https://link.gitcode.com/i/ba69ad19ab00dc03be8effe2

gitblog_00551的博客 1103

Guava的基础功能与集合

Guava中的基础功能和集合

hefrankeleyn的博客 9035
上一篇: nginx配置简介
下一篇: MySQL笔记
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值