29

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

4 回答 4

37

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

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

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

     // ${todo} Auto-generated catch block
于 2012-11-07T18:10:06.653 回答
1

就个人而言,我使用了一个通用的习惯用法,而不管实际检查的异常类型如何,您可以让 Eclipse 将其用作模板:

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

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

于 2012-11-07T18:10:44.140 回答
0

如果您从 catch 子句重新抛出异常,则必须在调用当前方法的方法中进行处理。但是,如果您将异常包装在 中RuntimeException,则无需处理它。但你为什么要这样做?

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

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

因为,在您的代码中,基本上您将 a 包装在 achecked exceptionunchecked one。如果我假设你的MyUnhandledExceptionas checked exception.

还要注意,如果您采用这种方法,您仍然需要declare itthrown您的throws clause.

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

但是,最好看看你的设计。为什么方法被覆盖并抛出未在您的方法中声明的异常overriden。应该是有问题,应该改正。

于 2012-11-07T18:08:04.687 回答
-1

您可能已经意识到这一点……但是如果您想摆脱检查异常带来的所有烦人的混乱和烦恼,为什么不添加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
}
于 2016-10-23T13:39:49.357 回答