1

我有一个网络服务器,可以在服务请求时捕获一长串异常。

目前,我们有一长串要处理许多 catch 块的异常。

是否有处理此类事情的最佳实践?

我在想类似的东西

} catch (Exception e) {
   return handleException(e);
}

Response handleException(Exception e) {
    if (e instanceof DomainException) {
       //DO SOMETHING
    } else if (e instanceof NullPointerException) {
         .
         .
         .

我不确定这是否更清洁。有什么更好的处理方法的建议吗?

4

2 回答 2

4

如果您使用的是Java 7,那么您可以使用 | 组合您的异常。在catch块中。例如:

catch (IOException|SQLException ex) 
于 2013-10-06T01:36:40.933 回答
1

Juned 提到的 Java 7 特性非常有帮助,但我很好奇为什么你首先需要这么多的 catch 块。无论是 Java 7 还是其他版本,都可以使用该语言的异常功能。

首先,确保您没有不必要地DomainException为现有异常(例如IllegalArgumentException.

其次,请记住已检查异常和未检查异常之间的区别。已检查的异常Exception从 RuntimeException 的类层次结构的另一端派生。常见的检查异常是IOException并且SQLException必须被处理。任何继承 RuntimeExceptionNullPointerException的子类——比如——都是未经检查的异常,不必被捕获或抛出或任何东西。

通常,您对可恢复的问题使用检查异常(客户端知道会发生什么并且可以优雅地处理问题并继续前进)和对灾难性问题(例如无法连接到数据库)使用未经检查的异常。

如果你能通过所有 AOP 的东西,是一个关于如何有效使用检查和未检查异常的精彩讨论。我认为那里描述的故障屏障的概念将帮助您大大减少捕获块。不再需要像在示例中那样捕获 NullPointerExceptions。

于 2013-10-06T02:27:36.093 回答