如何在Java中捕获包装异常?

如何在Java中捕获包装异常?,java,exception,exception-handling,Java,Exception,Exception Handling,我正在库上创建一个包装器。库引发多种类型的异常: A B C D E F. 某些类型是可重试的,而其他类型则不是。为了简化包装器客户端的异常处理,我将异常包装为两种检查异常: 可检索异常和异常。 因此,我的库中任何函数的签名如下所示: public void foo() throws RetriableException, Exception { ... } 但是,包装器的客户端应该能够直接捕获异常A、B、C。。以防他们想对他们采取一些具体行动 try { wrapper.foo()

我正在库上创建一个包装器。库引发多种类型的异常:
A B C D E F.

某些类型是可重试的,而其他类型则不是。为了简化包装器客户端的异常处理,我将异常包装为两种检查异常:
可检索异常和异常。

因此,我的库中任何函数的签名如下所示:

public void foo() throws RetriableException, Exception {
   ...
}
但是,包装器的客户端应该能够直接捕获异常A、B、C。。以防他们想对他们采取一些具体行动

try {
  wrapper.foo()
} catch (A e) {
  doSomething()
}
我应该如何为这种行为建模


一种方法是要求客户端执行exception.getCause(),但这并不直观。

您在包装中使用的逻辑是否可以提取为静态方法,例如,
ExceptionInspector.IsRetrable()
?扩展摘要以显示实际引发的异常。因此“为了简化包装器客户端的异常处理,我正在包装异常”但包装器客户端应该能够直接捕获异常A、B、C…”这两条语句是矛盾的。也许你需要重新考虑你的需求,而不是全部打包?也许根据业务逻辑(取决于你想从客户端捕获它们的方式)将它们打包成几个包装例外。你在包装中使用的逻辑是否可以提取为静态方法,例如
ExceptionInspector.isRetrable()
?扩展摘要以显示实际抛出的异常。因此,“为了简化包装器客户端的异常处理,我正在包装异常”,但包装器客户端应该能够直接捕获异常A、B、C。。。“这两种说法相互矛盾。也许您需要重新考虑您的需求,而不是将其全部打包?也许可以根据业务逻辑(取决于您希望如何从客户机捕获它们)将它们打包在几个打包例外中