抛出一长串异常vs抛出异常vs抛出自定义异常?

ath*_*ena 6 java exception-handling

我有一个使用两种API方法的应用程序.这两种方法都抛出超过五个例外.所以,如果我只是添加一个throws声明,那么它将成为一个超过十个的列表.(我的方法不能处理十个例外中的任何一个)

我读过,抛出一长串异常是一种不好的做法.抛出(伞)异常是一种不好的做法.所以我该怎么做?

  1. 添加一个try catch块,并在catch块中记录并退出?
  2. 创建自定义异常类,包装每个异常并抛出自定义异常?
  3. 为所有例外添加投票声明?
  4. 抛出异常?
  5. 添加一个try catch块,并在catch块中抛出RuntimeException?(目前的做法)

编辑:添加选项5.

Boz*_*zho 2

“2.创建自定义异常类”,但不适合所有人。将异常包装在逻辑组中。例如,您可以使用XmlWritingException,PaymentGatewayExceptionDataAccessException来根据场景包装不同的异常。

甚至可以(并且首选)将相同的异常包装在不同的包装器中。例如,如果由于通信问题导致付款失败,您可以包装,但如果在IOException使用xml 的某些 I/O 操作期间失败,您可以包装。所有这些例子都是假设的,但你明白了。PaymentGatewayExceptionXmlWritingException

最重要的是 - 将原始异常设置为新异常的原因,这样它就不会丢失。

更新:事实上,如果您不能期望客户端从异常中合理恢复,选项 5 就可以了。更好的是 - 您创建的自定义异常可以扩展RuntimeException。这就是 spring 所做的,例如,将所有与数据相关的异常包装在DataAccessException.