java - 异常处理执行流程
问题描述
我应该知道这一点,但由于某种原因,我现在无法弄清楚。
有没有办法重写这段代码来避免instanceof
?
try {
//Exceptions may happen
} catch (Exception1 exception1) {
//do stuff only in case of Exception1
} catch(Exception e) {
// do stuff in all exception cases except Exception1
if (e instanceof Exception2) {
// do stuff only in case of Exception2
}
}
解决方案
如果您打算Exception
对内联进行异常处理,并且不想重复它,那么唯一的解决方案就是 OP 解决方案。
但是,如果您可以将常见的异常处理放入一个函数中,那么这将是整洁的:
try {
//Exceptions may happen
} catch (Exception1 exception1) {
//do stuff only in case of Exception1
} catch(Exception2 e) {
doCommonStuff();
doException2Stuff();
} catch(Exception e) {
doCommonStuff();
}
但是,上述情况可能会导致一个小问题,即您是否希望将控制权传递到 try/catch 块之外,或者您是否希望返回一个值,甚至抛出另一个异常。
您可能会发现,尽管您的代码的所有路径都会引发异常,但上述使用常见异常处理程序方法的构造可能会像某些控制路径一样看起来像某些控制路径一样。
因此,您可以表达一个通用的异常处理程序,它总是会抛出这样的异常:
private <T> T throwLastException(Exception2 input) {
// blah blah blah
throw new SomeException();
}
这可以作为返回语句的一部分调用,该语句似乎保证调用函数返回一个值,而实际上它只是告诉编译器不要担心:)
推荐阅读
- jakarta-mail - 使用 Java 邮件客户端读取邮件时出现 FolderClosedIOException
- wpf - 多重绑定未设置值
- java - 顶部半径不显示角半径的cardview中的图像
- angular - 单击输入字段时防止角度材料列表行为
- python - 在 bash 脚本中运行时 pip install “解析错误”
- javascript - 为什么鼠标坐标没有出现
- linux - Sublime Text 3 中的 Package Control 出现多个错误
- php - move_uploaded_file 在 sql server 上不起作用
- javascript - 脚本问题 - 隐藏/显示元素
- wordpress - 如何使用javascript仅计算下拉列表中的选定选项