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



