Con il seguente codice:Perché try..finally block non registra l'eccezione originale come soppressa?
try {
throw new RuntimeException ("main");
}
finally {
throw new RuntimeException ("finally");
}
ottengo questo risultato:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:12)
Tuttavia, con l'aggiunta di eccezioni soppressi in Java 7, non sarebbe logico per la lingua per la registrazione originale eccezione "principale" come soppressa quando il blocco finally
non riesce con eccezione? Attualmente ho emulare manualmente questo:
try {
throw new RuntimeException ("main");
}
catch (RuntimeException exception) {
try {
throw new RuntimeException ("finally");
}
catch (RuntimeException exception2) {
exception2.addSuppressed (exception);
throw exception2;
}
}
a ricevere più utile (per capire cosa sta succedendo) risultato:
Exception in thread "main" java.lang.RuntimeException: finally
at test.main(test.java:13)
Suppressed: java.lang.RuntimeException: main
at test.main(test.java:9)
EDIT: per chiarire ciò che mi chiedo. La versione corrente di Java è 8, le eccezioni soppresse non sono una novità. Ma try..finally
ancora non li incorpora. C'è qualcosa che impedisce che ciò accada?
Non dovrebbe essere l'eccezione soppressa quella lanciata in 'finally'? – StenSoft
@StenSoft: anche se probabilmente più logico, ciò interromperebbe completamente la compatibilità con le versioni precedenti. – doublep
Non capisco gli stretti voti, ad essere onesti. Questa è una domanda perfettamente legittima. – fge