java7 中的精确重新抛出异常
Precise rethrow exception in java7
assylias 很好地解释了 final rethrow。
我在 method3
.
中添加了 final
public void method4() throws IOException {
try {
throw new IOException("1");
} catch (final Exception e) {
e = new IOException("2"); //does not compile
throw e; //does not compile
}
}
我将我的编译器设置为 1.7。 method4
有两个编译错误:
final exception can neither be reassigned nor throw precise exception.
那么,explicitfinal异常只是用来防止修改的?
Exception
的 catch 块是隐含的 final
这并不意味着你不能重新分配它。如果您专门将其设为 final
,则编译器将不允许您修改该引用。要使 throw
编译异常实例必须 final
或 有效 final
已在链接答案中涵盖。
public void method4() throws IOException {
try {
throw new IOException("1");
} catch (final Exception e) {
e = new IOException("2");// You can not modify final reference
throw e;
}
}
so explicit final exception is only used to prevent modify?
是的,在例外情况下,final
修饰符是多余的。始终建议 throw
或 log
例外。根据我的说法,任何异常的修改都是反模式。一般来说,即使在自定义异常的情况下,我们也不应该修改抛出的异常,除非并且直到您有非常充分的理由这样做。
assylias 很好地解释了 final rethrow。
我在 method3
.
public void method4() throws IOException {
try {
throw new IOException("1");
} catch (final Exception e) {
e = new IOException("2"); //does not compile
throw e; //does not compile
}
}
我将我的编译器设置为 1.7。 method4
有两个编译错误:
final exception can neither be reassigned nor throw precise exception.
那么,explicitfinal异常只是用来防止修改的?
Exception
的 catch 块是隐含的 final
这并不意味着你不能重新分配它。如果您专门将其设为 final
,则编译器将不允许您修改该引用。要使 throw
编译异常实例必须 final
或 有效 final
已在链接答案中涵盖。
public void method4() throws IOException {
try {
throw new IOException("1");
} catch (final Exception e) {
e = new IOException("2");// You can not modify final reference
throw e;
}
}
so explicit final exception is only used to prevent modify?
是的,在例外情况下,final
修饰符是多余的。始终建议 throw
或 log
例外。根据我的说法,任何异常的修改都是反模式。一般来说,即使在自定义异常的情况下,我们也不应该修改抛出的异常,除非并且直到您有非常充分的理由这样做。