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);
}
}