Guava学习笔记(五):简化异常处理的Throwables类
有时候, 当我们我们捕获异常, 并且像把这个异常传递到下一个try/catch块中。Guava提供了一个异常处理工具类, 可以简单地捕获和重新抛出多个异常。例如:
import java.io.IOException;
import org.junit.Test;
import com.google.common.base.Throwables;public class ThrowablesTest {@Testpublic void testThrowables(){try {throw new Exception();} catch (Throwable t) {String ss = Throwables.getStackTraceAsString(t);System.out.println("ss:"+ss);Throwables.propagate(t);}}@Testpublic void call() throws IOException {try {throw new IOException();} catch (Throwable t) {Throwables.propagateIfInstanceOf(t, IOException.class);throw Throwables.propagate(t);}}
}
将检查异常转换成未检查异常,例如:
import java.io.InputStream;
import java.net.URL;
import org.junit.Test;
import com.google.common.base.Throwables;public class ThrowablesTest {@Testpublic void testCheckException(){try { URL url = new URL("http://ociweb.com"); final InputStream in = url.openStream(); // read from the input stream in.close(); } catch (Throwable t) { throw Throwables.propagate(t); } }
}
传递异常的常用方法:
1.RuntimeException propagate(Throwable):把throwable包装成RuntimeException,用该方法保证异常传递,抛出一个RuntimeException异常
2.void propagateIfInstanceOf(Throwable, Class<X extends Exception>) throws X:当且仅当它是一个X的实例时,传递throwable
3.void propagateIfPossible(Throwable):当且仅当它是一个RuntimeException和Error时,传递throwable
4.void propagateIfPossible(Throwable, Class<X extends Throwable>) throws X:当且仅当它是一个RuntimeException和Error时,或者是一个X的实例时,传递throwable。
使用实例:
import java.io.IOException;
import org.junit.Test;
import com.google.common.base.Throwables;public class ThrowablesTest { @Testpublic void testThrowables(){try {throw new Exception();} catch (Throwable t) {String ss = Throwables.getStackTraceAsString(t);System.out.println("ss:"+ss);Throwables.propagate(t);}}@Testpublic void call() throws IOException {try {throw new IOException();} catch (Throwable t) {Throwables.propagateIfInstanceOf(t, IOException.class);throw Throwables.propagate(t);}}public Void testPropagateIfPossible() throws Exception {try {throw new Exception();} catch (Throwable t) {Throwables.propagateIfPossible(t, Exception.class);Throwables.propagate(t);}return null;}
}
Guava的异常链处理方法:
1.Throwable getRootCause(Throwable)
2.List<Throwable> getCausalChain(Throwable)
3.String getStackTraceAsString(Throwable)
Guava学习笔记(五):简化异常处理的Throwables类相关推荐
- Guava学习笔记:简化异常处理的Throwables类
Guava学习笔记:简化异常处理的Throwables类 参考文章: (1)Guava学习笔记:简化异常处理的Throwables类 (2)https://www.cnblogs.com/peida/ ...
- Struts2学习笔记(五)之异常处理机制
我们在知道在软件开发中的异常处理是很重要的,作为成熟的MVC框架的Struts2也提供了异常处理处理机制,对于一场处理:用户发送请求-->Action控制器-->发现相应的异常--> ...
- 【转】【C++学习笔记】C++异常处理
转自:[C++学习笔记]C++异常处理!你绝对不能错过的干货! - 知乎 合理地使用C++异常处理,能够使我们写出来的程序更加稳定强健,不易崩溃.那么,应该如何使用C++异常处理呢?下面,我们就来向大 ...
- python函数是一段具有特定功能的语句组_Python学习笔记(五)函数和代码复用
本文将为您描述Python学习笔记(五)函数和代码复用,具体完成步骤: 函数能提高应用的模块性,和代码的重复利用率.在很多高级语言中,都可以使用函数实现多种功能.在之前的学习中,相信你已经知道Pyth ...
- Ethernet/IP 学习笔记五
Ethernet/IP 学习笔记五 Accessing data within a device using a non-time critical message (an explicit mess ...
- StackExchange.Redis学习笔记(五) 发布和订阅
StackExchange.Redis学习笔记(五) 发布和订阅 原文:StackExchange.Redis学习笔记(五) 发布和订阅 Redis命令中的Pub/Sub Redis在 2.0之后的版 ...
- 吴恩达《机器学习》学习笔记五——逻辑回归
吴恩达<机器学习>学习笔记五--逻辑回归 一. 分类(classification) 1.定义 2.阈值 二. 逻辑(logistic)回归假设函数 1.假设的表达式 2.假设表达式的意义 ...
- 好程序员教程分析Vue学习笔记五
好程序员教程分析Vue学习笔记五,上次我们学习了Vue的组件,这次我们来学习一下路由的使用.在Vue中,所谓的路由其实跟其他的框架中的路由的概念差不多,即指跳转的路径. 注意:在Vue中,要使用路由, ...
- 【AngularJs学习笔记五】AngularJS从构建项目开始
为什么80%的码农都做不了架构师?>>> #0 系列目录# AngularJs学习笔记 [AngularJs学习笔记一]Bower解决js的依赖管理 [AngularJs学习笔 ...
- ROS学习笔记五:理解ROS topics
ROS学习笔记五:理解ROS topics 本节主要介绍ROS topics并且使用rostopic和rqt_plot命令行工具. 例子展示 roscore 首先运行roscore系列服务,这是使用R ...
最新文章
- Internet Explorer 9.0 正式版试用一点小总结
- Machine Learning Yearning book draft - 读记(前14章)
- 计算机网络物理层知识要点:通信基础、传输介质和设备
- OpenTLD 未完成 - 虎头
- WinSCP断线,WinSCP总是断线,断线重连过程又需要卡很长时间解决办法
- 怎么重新启动协议服务器,如何启用或禁用服务器网络协议 (SQL Server PowerShell)
- 关于计算机犯罪的英语作文,关于信息安全的英语作文范文
- ElasticSearch全文搜索引擎之Restful API和索引操作篇
- 科技爱好者周刊:第 78 期
- Blender物理引擎
- 微信公众号实现消息模板的推送
- JS事件之事件类型[鼠标和滚轮事件]
- 证件照怎么制作?怎样自己在线制作2寸照片?
- linux 脚本里切换用户密码,shell,切换用户,执行指定,脚本
- deep learning 入门
- python实现抢票github_面向回家编程!GitHub标星两万的”Python抢票教程”,我们先帮你跑了一遍...
- QMUI-Android的一些尝试(圆形进度条、Loading、圆形图片、圆形按钮、椭圆图片)
- Python的一个图片识别工具-PyTesseract(Win10)
- SQL语言的四大功能
- 2015年江苏省信息与未来小学生编程思维展示活动试题--加数