我有一个网络服务器,可以在提供请求时捕获一长串异常。
目前我们有很多例外情况,我们会处理许多catch块。
处理这样的事情是否有最好的做法?
我在考虑像
这样的东西} catch (Exception e) {
return handleException(e);
}
Response handleException(Exception e) {
if (e instanceof DomainException) {
//DO SOMETHING
} else if (e instanceof NullPointerException) {
.
.
.
我不确定这是否更干净。有关更好的方法处理它们的任何建议吗?
答案 0 :(得分:4)
如果您使用的是Java 7,那么您可以使用|来支持您的例外情况在catch
区块。例如:
catch (IOException|SQLException ex)
答案 1 :(得分:1)
Juned提到的Java 7功能非常有用,但我很好奇为什么你首先需要这么多的catch块。无论是Java 7还是其他,请使用该语言的异常功能。
首先,请确保您不必为DomainException
等现有例外所解决的情况发明自己的IllegalArgumentException
。
其次,请记住已检查和未检查的异常之间的区别。已检查的异常派生自RuntimeException的Exception
类层次结构的另一端。常见的已检查例外情况为IOException
和SQLException
,必须予以处理。任何继承RuntimeException的东西 - 比如NullPointerException
- 都是一个未经检查的异常,不必被捕获或抛出或任何东西。
通常,您使用已检查的异常来解决可恢复的问题(客户端知道会发生什么,可以优雅地处理问题并继续前进)和未经检查的灾难性异常(例如无法连接到数据库)。
如果您可以浏览所有AOP内容,this就如何有效地使用已检查和未检查的异常进行了很好的讨论。我认为那里描述的断层障碍的概念将帮助你大大减少捕获块。无需像在样本中那样捕获NullPointerExceptions。