Durante i miei studi all'OCPJP8 ho riscontrato una domanda che non ha una risposta molto chiara a me. Considera il seguente codice:Lanciare l'eccezione di runtime in Closable.close()
public class Animals
{
class Lamb implements Closeable
{
public void close()
{
throw new RuntimeException("a");
}
}
public static void main(String[] args)
{
new Animals().run();
}
public void run()
{
try (Lamb l = new Lamb();)
{
throw new IOException();
}
catch (Exception e)
{
throw new RuntimeException("c");
}
}
}
In base al libro risposta corretta per una domanda "Quale eccezione verrà lanciata dal codice?" è "Eccezione di runtime c senza eccezione soppressa". Ho controllato questo codice in Eclipse e system.out suggerisce che il libro è giusto. Tuttavia, ho anche modificato il codice un po 'e ha aggiunto il seguente System.out poco prima di gettare RuntimeException "c"
System.out.println(e.getSuppressed().toString());
e l'uscita che ho avuto da questo System.out è:
[Ljava.lang.Throwable; @ 75da931b
Quindi, chiaramente c'è un'eccezione soppressa. In modalità di debug, ho anche scoperto che questa eccezione soppressa è quella che aggrotta le sopracciglia nel metodo close().
Due domande: 1. Perché non ci sono informazioni nella console sull'eccezione lanciata nel metodo close()? 2. La risposta data dal libro è corretta?
Come nota a margine, utilizzare 'System.out.println (Arrays.toString (e.getSuppressed()));' per ottenere un risultato più significativo ... – Holger