java:无法重抛异常:未处理的异常类型异常

2022-09-03 04:52:27

我想捕获异常,记录它,设置一个标志,然后重新调用相同的异常

我有这个代码:

public Boolean doJobWithResult() {
    boolean result = true;
    final Feed feed = Feed.findById(feedId);
    try {
        feed.fetchContents();
    } catch (Exception ex) {
        result = false;
        Logger.info("fetching feed(%d) failed", feedId);
        throw ex;
    }
    return result;
}

但是 eclipse 在 throw ex 上抱怨,告诉“未处理的异常类型 Exception”,并建议我在它周围添加一个 try-catch 块。

实际上,我希望调用此方法的进程来处理异常,而不是自己处理它...如果一切正常,我只想返回 true,如果出现异常,则将其记录

另一方面,我可以将异常包装在另一个异常中,但我不能抛出相同的异常。

任何想法?


答案 1

我认为这里有很多事情要提:

  1. 您要么希望在成功时返回 true,在失败时返回 false,要么在成功时不返回任何内容,并在失败时引发异常。两者同时是不可能的。在第一种情况下,捕获异常,记录它并返回 false,在第二种情况下,更改您的签名以返回并引发异常并在调用方中处理它。doJobWithResult()void
  2. 这是一个不要捕获异常,记录它并重新删除它。为什么?因为您的方法的潜在调用方不知道您已经在记录它,并且还要记录它。要么引发异常(在这种情况下,调用方必须处理它),要么捕获它并处理它(记录它)。
  3. 请注意,抛出不会为方法的调用方提供有关方法中可能出错的任何线索,最好抛出更具体的异常,或者将异常包装在用户定义的异常中并重新抛出。Exception
  4. 此外,如果你抛出 ,调用方可能会试图捕获,而没有注意到这也将捕获每个 RuntimeException(因为它派生自 ),这可能是不需要的行为。ExceptionExceptionException

答案 2

您的 doJobWithResult 方法需要声明它可以引发异常:

public Boolean doJobWithResult() {

成为

public Boolean doJobWithResult() throws Exception {

推荐