java如何捕获函数尚未抛出的所有异常?
我有点怀疑这是否可能,但获得更多关于这方面的信息将非常有帮助。我想知道如何捕捉函数尚未抛出的所有异常
假设我有一个功能:
public int func(int a, int b) throws IOException, EOFException {
try {
doSomething(a, b);
} catch (AllExceptionsExceptionIOandEOF e) {
doSomethingWithError(e);
}
return 0;
}
有没有办法告诉Java如何做到这一点?我知道抛出泛型Exception
对所有人都有效,但我想抛出除抛出异常以外的所有异常
如果这被认为是不好的做法,为什么?实现同样目标的好选择是什么
(PS——我知道,我知道一句格言,所有可能的异常都需要单独处理。出于我的目的,我只想捕捉错误,将它们记录到数据库中,看看在开发过程中我们遗漏了什么。当我的函数已经抛出了2个异常时,我不愿意捕捉通用的Exception
)
我突然想到,有一种说法是:
try {
doSomething(a, b);
} catch (AllExceptionsExceptionIOandEOF e) {
doSomethingWithError(e);
if (e instanceof IOException)
throw e;
if (e instanceof EOFException)
throw e;
}
但是有没有更优雅的方法呢
编辑——不幸的是,该项目是在Java 6合规性中完成的。我知道Java7让Try/Catch变得更灵活了
# 1 楼答案
# 2 楼答案
在Java1.7中,您可以对异常行为进行分组
要捕获函数只抛出
RuntimeException
的所有异常,子类会导致它们是未检查的异常对于层级例外,首先是子类,然后是更一般的
例如:
顺便说一下,只捕获一次异常
# 3 楼答案
由于EOFEException扩展了IOException,所以可以捕获IOException并如下抛出它
捕获(IOE例外){ //做你想做的 }
# 4 楼答案
在java1之前。七,
只需确保从更具体到不那么具体地声明catch子句即可
在java 1.7中,您可以做更有趣的事情:
# 5 楼答案
根据其他答案,尤其是Java 1.7之前的版本,你没有一个真正好的答案。如果这将在代码中的许多地方完成,并且您主要希望它用于开发,我可能建议创建一个特殊的处理程序:
然后在异常块中:
这将重新抛出请求的异常,并且您有一个vararg列表,其中列出了每个异常块要重新抛出的异常。您可以重复使用它,并且只向每个异常块添加一行。您可以根据需要调整逻辑,以记录未处理的异常或任何其他需要的内容
这不是很好,但你的问题没有很多好的解决方案