Se ho un metodo che genera un'eccezione incontrollato, ad esempio:Esiste un vantaggio nel dichiarare che un metodo genera un'eccezione non controllata?
void doSomething(int i) {
if (i < 0) throw new IllegalArgumentException("Too small");
// ...
}
c'è alcun vantaggio per dichiarare esplicitamente che il metodo genera l'eccezione, cioè
void doSomething(int i) throws IllegalArgumentException {
if (i < 0) throw new IllegalArgumentException("Too small");
// ...
}
rispetto a (o in Oltre al) descrive il comportamento in javadoc:
/**
* This method does something useful.
* @param i some input value
* @throws IllegalArgumentException if {@code i < 0}
*/
void doSomething(int i) {
if (i < 0) throw new IllegalArgumentException("Too small");
// ...
}
I motivi per cui avrei rivendicazione non è utile avere la throws
sono:
throws
fornisce alcuna informazione per quanto riguarda le circostanze in cui viene generata l'eccezione, solo che potrebbe essere gettati;- Poiché si tratta di un'eccezione non controllata, non sono obbligato a gestire l'eccezione nel codice di chiamata. Saprò davvero che potrebbe essere lanciato se vado a dare un'occhiata all'implementazione di
doSomething
; - Il corpo di
doSomething
potrebbe richiamare il codice che genera altri tipi di eccezione non controllata; affermando che "questo metodo generaIllegalArgumentException
" sembra che stia raccontando solo parte della storia, potenzialmente; - Se il metodo non è definitivo, può essere sovrascritto in modo tale che la nuova implementazione venga dichiarata per generare eccezioni non controllate aggiuntive; non sai quale implementazione stai invocando.
I motivi per cui vorrei sostengono che sarebbe utile avere la throws
sono:
- Si sta segnalando un problema che si potrebbe ragionevolmente aspettarsi di incontrare quando si richiama il metodo.
Insomma, penso che throws
non è necessaria, ma una descrizione javadoc tramite @throws
è utile. Sarei interessato a conoscere l'opinione degli altri su questo.
Speriamo che questo thread sia di aiuto sul problema - [Gestione delle eccezioni secondo gli standard di codifica Java] (http: // StackOverflow.it/q/10344173/1057230) –