JDK 1.7 可抛出的'addSuppressed()'方法
好吧,我通过相关问题,我阅读了JDK 1.7的源代码,但我没有找到答案。
在这个问题上,我想完全忽略。fillInStackTrace
从JDK开始,添加了1.4方法。例如,当您使用核心反射调用方法时,您将收到 InvocationTargetException,其中包含其中的目标异常的原因。initCause()
当我看到这个功能时,我也开始在这样的场景中使用它。
try {
//contains some code that can throw new IOException();
}
catch(IOException e){
throw new RuntimeException(e);
}
所以,我抓住了一个异常,我还没有准备好在这里处理它,我重新抛出新的异常,因为我有原始的异常作为原因。在某些情况下,不是 RuntimeException,而是使用我的自定义异常,因此有时我也调用 to 以在外部块中正确处理此异常。e.getCause()
这是 JDK 1.7 之前的情况。为什么以及何时应该使用?我应该将上面的代码更改为addSuppressed()
try {
//contains some code that can throw new IOException();
}
catch(IOException e){
RuntimeException re= new RuntimeException(e.getMessage());
re.addSuppressed(e);
throw re;
}
作为一个奖励问题,为什么不返回,因为允许?例如,为什么我不能这样做?addSuppressed()
Throwable
initCause()
throw (RuntimeException)new RuntimeException().initCause(e);
try {
//contains some code that can throw new IOException();
}
catch(IOException e){
throw (RuntimeException)new RuntimeException(e.getMessage()).addSuppressed(e);
}
我把答案提取到一个单独的帖子中。