java:不能抛出异常:未处理的异常类型Exception

我想捕获一个异常,将其记录下来,设置一个标志,然后重新抛出相同的异常

我有这个代码:

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. 您要么希望doJobWithResult()成功返回true,失败返回false,要么成功不返回任何内容,而失败则抛出异常。两者不能同时进行。在第一种情况下,捕获异常,记录它并返回false,在第二种情况下更改签名返回void,并抛出 一个 异常,并在调用者处理。
  2. 这是 不要 捕获异常,将其记录并重新抛出它。为什么?因为您的方法的潜在调用者不知道您已经在记录它,所以也可能要记录它。引发异常(在这种情况下,调用方必须处理该异常),或者捕获该异常并对其进行处理(记录该异常)。
  3. 请注意,Exceptionthrow并不能为方法的调用者提供任何可能导致方法出错的线索,总是最好抛出更具体的异常,或者将异常包装在用户定义的异常中并重新抛出。
  4. 此外,如果您抛出Exception,调用者可能会很想捕获Exception而不注意它也会捕获每个RuntimeException(因为它是从派生的Exception),而这可能不是您期望的行为。

以上是 java:不能抛出异常:未处理的异常类型Exception 的全部内容, 来源链接: utcz.com/qa/422081.html

回到顶部