Vorrei aggiungere informazioni a un'eccezione/traccia dello stack.Aggiunta di informazioni a un'eccezione
Fondamentalmente ho qualcosa di simile fin d'ora, che mi piace molto:
Exception in thread "main" java.lang.ArithmeticException:/by zero
at com.so.main(SO.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
Tuttavia mi piacerebbe prendere tale eccezione e aggiungere informazioni aggiuntive ad esso, pur avendo la pila originale traccia.
Per esempio, mi piacerebbe avere che:
Exception in thread "main" CustomException:/by zero (you tried to divide 42 by 0)
at com.so.main(SO.java:41)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke
Quindi, fondamentalmente voglio prendere l'ArithmeticException e rethrow, diciamo, un CustomException (aggiungendo "si è tentato di dividere 42 per 0" in questo esempio) pur mantenendo lo stacktrace dall'originale ArithmeticException.
Qual è il modo corretto di farlo in Java?
corretta è la seguente:
try {
....
} catch (ArithmeticException e) {
throw new CustomException("You tried to divide " + x + " by " + y, e);
}
Come faresti a conoscere i dettagli dell'eccezione se non fossi stato tu a lanciarlo? – Falmarri
@Falmarri: non conosco le specificità, ma posso aggiungere ulteriori informazioni, come i parametri del metodo. Ho aggiunto un esempio alla fine della mia domanda. – NoozNooz42
Solitamente questa informazione è utile solo per il debug. Puoi anche provare a utilizzare il debugger per eseguire il debug del programma e posizionare un punto di interruzione sull'eccezione. Quando viene lanciata l'eccezione, vedrai le condizioni che l'hanno causata. –