在Eclipse中更改未处理的exception自动生成的catch代码?

如果我在Java中有未处理的exception,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); } 

这可能吗?

UPDATE

为什么这么爱改变话题的人???

如果捕获并打印exception,则也不再需要捕获它。 如果我忘记错误地处理exception,我喜欢我的应用程序崩溃。 所以,我喜欢在默认情况下重新抛出它。

是的,您可以更改Eclipse添加的默认代码。

  1. 在Preferences中,导航到Java> Code Style> Code Templates
  2. Code下 ,选择Catch block body
  3. 按“编辑”按钮更改代码。 完成后,按OK按钮。

考虑在默认catch块中添加TODO注释。 例如,默认包括:

  // ${todo} Auto-generated catch block 

就个人而言,无论实际检查的exception类型如何,我都使用通用的习惯用法,您可能会将Eclipse用作模板:

 try { ... } catch (RuntimeException e) { throw e; } catch (Exception e) { throw new RuntimeException(e); } 

关键是要包装整个代码块而不是单独包含可能引发exception的每一行。 该块可能会抛出任意数量的已检查和未检查的exception,这将允许未经检查的exception无损地通过,并且将检查已检查的exception。

如果要从catch子句中重新抛出exception,则必须处理调用当前方法的方法。 但是如果在RuntimeException包装exception,则不需要处理它。 但你为什么要那样做?

我的意思是为什么不只是: –

 try { myfunction(); } catch (MyUnhandledException e) { throw e; } 

因为,在您的代码中,基本上您将在unchecked one checked exception包装可能被checked exception 。 如果我将MyUnhandledException视为已checked exception

并且还要注意,如果您遵循这种方法,您仍然需要declare itthrows clausethrows clause

如果你只是想按照自己的方式去做,那么它也会正常工作。 您可以根据@Andy的答案更改Eclipse setting

但是,看看你的设计会更好。 为什么方法会覆盖抛出未在overriden方法中声明的exception。 可能有问题,应该纠正。

你可能已经意识到了这一点……但是如果你想要从已检查的exception中消除所有讨厌的混乱和烦恼,为什么不在每个方法中添加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 }