当我们得到一个实际上是异常的对象时,我们可以用它们做我们可以用我们语言中的普通对象做的任何事情.我们可以将它们作为参数传递,我们可以将它们存储在一些集合中,最糟糕的是,我们可以从方法中返回它们!
所以有人可能会写这样的臭代码:
public Exception doSomethingCritical()
{
Exception error = null;
try
{
...
}
catch (Exception e)
{
// maybe at least here is the logging of the error if we are lucky
error = e;
}
return error;
}
Run Code Online (Sandbox Code Playgroud)
所以问题是为什么Exception-object的概念是许多OO语言中的一等公民?也许如果我们在异常对象(如throw)允许的语言中只有有限的结构,那就更好了.
将异常视为一种特殊情况并且仅允许有限的异常功能的问题在于,最终某个好程序需要对异常执行某些操作,无论是全局错误处理程序还是适当处理异常的有限项.通过制定例外的一等公民,有许多好处,例如:
除此之外,没有办法防范上面发布的错误异常处理.即使一个例外不是头等公民,也没有办法阻止开发人员吃任何和所有例外并继续他们的快乐方式(至少,没有从根本上打破我们对异常的看法)