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,如果有异常,则将其记录下来
另一方面,我可以将异常包装在另一个异常中,但是不能抛出相同的异常。
任何想法?
回答:
我认为这里有很多事情要提到:
- 您要么希望
doJobWithResult()
成功返回true,失败返回false,要么成功不返回任何内容,而失败则抛出异常。两者不能同时进行。在第一种情况下,捕获异常,记录它并返回false,在第二种情况下更改签名返回void
,并抛出 一个 异常,并在调用者处理。 - 这是 不要 捕获异常,将其记录并重新抛出它。为什么?因为您的方法的潜在调用者不知道您已经在记录它,所以也可能要记录它。引发异常(在这种情况下,调用方必须处理该异常),或者捕获该异常并对其进行处理(记录该异常)。
- 请注意,
Exception
throw并不能为方法的调用者提供任何可能导致方法出错的线索,总是最好抛出更具体的异常,或者将异常包装在用户定义的异常中并重新抛出。 - 此外,如果您抛出
Exception
,调用者可能会很想捕获Exception
而不注意它也会捕获每个RuntimeException(因为它是从派生的Exception
),而这可能不是您期望的行为。
以上是 java:不能抛出异常:未处理的异常类型Exception 的全部内容, 来源链接: utcz.com/qa/422081.html