如果我在Java中有未处理的异常,Eclipse会向我提出两个选项:(1)添加throws声明和(2)使用try / catch环绕。
如果我选择(2)它会添加一个代码
try {
myfunction();
} catch (MyUnhandledException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
我想将此更改为
try {
myfunction();
} catch (MyUnhandledException e) {
throw new RuntimeException(e);
}
这可能吗?
更新
为什么如此热爱改变人们的主题???
如果捕获并打印异常,也不再需要捕获它。如果我忘记错误地处理异常,我喜欢我的应用程序崩溃。所以,我喜欢在默认情况下重新抛出它。
答案 0 :(得分:36)
是的,您可以更改Eclipse添加的默认代码。
考虑在默认的catch块中添加TODO注释。例如,默认值包括:
// ${todo} Auto-generated catch block
答案 1 :(得分:1)
就个人而言,无论实际检查的异常类型如何,我都使用通用习惯用法,您可能会将Eclipse用作模板:
try {
...
}
catch (RuntimeException e) { throw e; }
catch (Exception e) { throw new RuntimeException(e); }
关键是要包装整个代码块而不是单独包含可能引发异常的每一行。该块可能会抛出任意数量的已检查和未检查的异常,这将允许未经检查的异常无损地通过,并且将检查已检查的异常。
答案 2 :(得分:0)
如果要从catch子句中重新抛出异常,则必须处理调用当前方法的方法。但是如果你将例外包装在RuntimeException
中,则不需要处理它。但你为什么要这样做呢?
我的意思是为什么不只是: -
try {
myfunction();
} catch (MyUnhandledException e) {
throw e;
}
因为在您的代码中,基本上您将checked exception
包裹在unchecked one
中。如果我将MyUnhandledException
假设为checked exception
。
另请注意,如果您遵循此方法,则仍需要declare it
thrown
throws clause
。
如果您只是想按照自己的方式行事,那么它也会正常工作。您可以根据@Andy的回答更改Eclipse setting
。
但是,看看你的设计会更好。为什么方法会覆盖抛出未在overriden
方法中声明的异常。可能有问题,应该纠正。
答案 3 :(得分:0)
你可能已经意识到了这一点......但如果你想摆脱所检查的异常中所有令人讨厌的混乱和烦恼,为什么不在每一种方法中添加throws Exception
呢?
在重写接口方法的情况下,可以使用这种模式:
@Override
public void close() throws IOException {
try {
_close();
} catch (Exception e) {
// TODO Auto-generated catch block
throw new RuntimeException(e);
}
}
private void _close() throws Exception {
// ... closing ops
}