好的,我知道捕获 throwable 不是一个好主意:
try {
// Some code
} catch(Throwable e) { // Not cool!
// handle the exception
}
但最近我在阅读一个开源代码时,看到了这段有趣的(至少对我而言)代码:
try {
// Some Code
} catch (Throwable ex){
response = handleException(ex, resource);
}
private handleException(Throwable t, String resource) {
if (t instanceof SQLEXception) {
// Some code
} else if (t instanceof IllegalArgumentException) {
//some code
} //so on and so forth
}
这似乎没有那么糟糕?这种方法有什么问题?
最佳答案
您不应该捕获 Throwable 有多种原因。首先,Throwable
包含 Error
- 如果出现其中之一,应用程序通常无能为力。 Throwable 也减少了你发现发生了什么的机会。你得到的只是“发生了一些不好的事情”——这可能是一场灾难,也可能只是一种滋扰。
另一种方法更好,但当然我仍然不会捕获 Throwable,但如果可能的话, try catch 更具体的异常。否则,您会捕获一切,然后尝试找出发生了哪种坏事。你的例子可以写成...
try {
...
} catch (SQLEXception ex){
response = ... ;
} catch (IllegalArgumentException ex){
response = ...;
}
...这将减少 if ( ... instanceof ... )
block 的数量(这只是因为作者首先决定在一个大桶中捕获所有内容而需要)。它实际上是 throws Throwable
,那么你当然没有太多选择。
关于java - 捕获可抛出并处理特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31585265/