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

时间:2012-11-07 18:05:41

标签: java eclipse code-generation content-assist

如果我在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);
}

这可能吗?

更新

为什么如此热爱改变人们的主题???

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

4 个答案:

答案 0 :(得分:36)

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

  1. 在“偏好设置”中,导航至 Java>代码样式>代码模板
  2. 代码下,选择 Catch block body
  3. 按“编辑”按钮更改代码。完成后,按下 确定按钮。
  4. 考虑在默认的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
}