我想捕获一个异常,记录它,设置一个标志,然后重新抛出相同的异常
我有这个代码:
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,告诉我“未处理的异常类型异常”,并建议我在它周围添加一个 try-catch block 。
其实我是想让调用这个方法的进程来处理异常,而不是自己处理...我只想一切正常就返回true,有异常就记录
另一方面,我可以将异常包装在另一个异常中,但我不能抛出同一个异常..
有什么想法吗?
最佳答案
我认为这里有很多事情要提:
- 您要么希望
doJobWithResult()
在成功时返回 true,在失败时返回 false,或者在成功时不返回任何内容并在失败时抛出异常。 两者同时是不可能的。在第一种情况下,捕获异常,记录它并返回 false,在第二种情况下更改您的签名以返回void
并抛出 异常并在调用者中处理它。 - 不要捕获异常、记录它并重新抛出它。为什么?因为您的方法的潜在调用者不知道您已经在记录它,并且可能也会记录它。 要么抛出异常(在这种情况下调用者必须处理它)要么捕获它并处理它(记录它)。
- 请注意,抛出
Exception
不会为您的方法的调用者提供有关您的方法中可能出现的问题的任何线索,抛出更具体的异常或将异常包装在用户定义的并重新抛出它。 - 此外,如果您抛出
Exception
,调用者可能会试图捕获Exception
而没有注意到这也会捕获每个 RuntimeException(因为它派生自Exception
),这可能不是期望的行为。
关于java: 无法重新抛出异常:未处理的异常类型异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9494225/