Considera il seguente frammento di codice:
class Foo {
Baz baz;
// ...
void bar() {
int p = this.baz.doSomething();
if (p == this.x) {
throw new FooException('Invalid values', FooException::INVALID_VALUES);
}
this.x = p * this.y;
}
// ...
}
Baz::doSomething() può generare eccezioni del tipo BazException .
Questo fa sì che Foo::bar() lanci entrambi i tipi di eccezioni, del tipo FooException e BazException .
È accettabile avere questo tipo di metodi, o i metodi di un'eccezione devono essere generati solo dal proprio tipo di eccezione? Un esempio di ciò con la funzione bar riscritta è la seguente:
void bar() {
try {
int p = this.baz.doSomething();
if (p == this.x) {
throw new FooException('Invalid values', FooException::INVALID_VALUES);
}
}
catch (BazException be) {
throw new FooException('Invalid values', FooException::INTERNAL_ERROR);
}
}