【发布时间】:2011-09-15 19:16:14
【问题描述】:
昨天我把这个article 发红了关于 Java 7 中新的异常处理。
在文章中,他们展示了一个在 Java 6 中不起作用的示例(第 4 号)。我只是复制了它。
public class ExampleExceptionRethrowInvalid {
public static void demoRethrow()throws IOException {
try {
// forcing an IOException here as an example,
// normally some code could trigger this.
throw new IOException("Error");
}
catch(Exception exception) {
/*
* Do some handling and then rethrow.
*/
throw exception;
}
}
public static void main( String[] args )
{
try {
demoRethrow();
}
catch(IOException exception) {
System.err.println(exception.getMessage());
}
}
}
就像文章中描述的那样,它不会编译,因为类型不匹配 -throw IOException- 和 -throw exception-。在 Java 7 中它会。所以我的问题是。
如何在 Java 6 中正确实现这种重新抛出异常?我不喜欢建议的实施示例五。我知道这是一个品味和问题的问题,你是否尝试处理未经检查的异常。那么我该怎么做才能获得 -throws IOException- 并保留堆栈跟踪?我是否应该只将 catch 更改为 IOException 并冒着无法全部捕获的风险?
我很好奇你的答案。
【问题讨论】:
-
这闻起来像是一个拼写错误。我认为它应该在第 10 行
catch(IOException exception) {... 否则这没有任何意义。 -
@Bobby 但这样就可以了。我认为这不是一个错字。