Когда мы получаем объекты, которые на самом деле являются исключениями, мы можем делать с ними все, что мы можем делать с обычными объектами на нашем языке. Мы можем передать их в качестве аргумента, мы можем сохранить их в некоторой коллекции и, что самое худшее, мы можем вернуть их в результате методов!
Так что для кого-то есть возможность написать вонючий код, подобный этому:
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;
}
Итак, вопрос в том, почему концепция объекта-исключения является первоклассным гражданином во многих ОО-языках? Может быть, будет лучше, если у нас есть только ограниченные конструкции в языке, которые разрешены для объектов исключений (например, throw).