Ho cercato di trovare una risposta a questa domanda ma non ho ottenuto alcuna spiegazione soddisfacente. Ecco alcuni retroscena:Java7 gestione di eccezioni multiple
Java 7 ci consente di intercettare più eccezioni in un unico blocco di catch purché tali eccezioni provengano da una gerarchia differente. Ad esempio:
try {
// some code
} catch(SQLException | FileNotFoundException e) {
e.printStackTrace();
} catch(Exception e) {
e.printStackTrace();
}
Ma se eccezioni sono della stessa gerarchia dobbiamo usare più blocchi catch come:
try {
// some code
} catch(FileNotFoundException e) {
e.printStackTrace();
} catch(IOException e) {
e.printStackTrace();
}
Ma se provo a scrivere codice come sotto compilatore si lamenta che "L'eccezione FileNotFoundException
è già catturato dalla alternativa IOException
"
try {
// some code
} catch(FileNotFoundException | IOException e) { // compiler error
e.printStackTrace();
}
Ora la mia domanda è: perché il compilatore segnala un errore in quest'ultimo caso, non è vero cifra che FileNotFoundException
è un caso speciale di IOException
? Ciò farebbe risparmiare la duplicazione del codice quando la mia logica di gestione delle eccezioni è la stessa.
Se si sta gestendo 'IOException', non è necessario utilizzare lo stesso blocco di gestione per' FileNotFoundException' –