在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添加的默认代码。
- 在Preferences中,导航到Java> Code Style> Code Templates 。
- 在Code下 ,选择Catch block body 。
- 按“编辑”按钮更改代码。 完成后,按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 it
在throws clause
中throws 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 }