È ragionevole mantenere un riferimento a un'eccezione per un uso successivo, o ci sono delle insidie in gioco nel mantenere un riferimento a un'eccezione per un tempo significativamente maggiore rispetto all'interazione throw/catch?Qual è una durata ragionevole aspettarsi da un'eccezione java?
Ad esempio, dato il codice:
class Thing {
private MyException lastException = ...;
synchronized void doSomethingOrReportProblem() {
try {
doSomething();
} catch (MyException e) {
if (seemsLikeADifferentProblem(e, lastException)) {
reportProblem(e);
}
lastException = e;
}
}
}
Supponendo che il mio programma crea una cosa con una durata di vita fino a quando la JVM, ci sono problemi di correttezza coinvolti Thing mantenendo un riferimento persistente a lastException? E questo è cambiato per niente in JDK7? (Guardando il codice sorgente a Throwable in OpenJDK7, sembra che ci sia un nuovo costruttore pubblico a quattro argomenti che non era in JDK6 che può creare un Throwable senza richiamare fillInStackTrace() al momento della costruzione.)
Se qualcuno di le eccezioni concatenate sotto MyException avevano riferimenti agli oggetti, sì, questo avrebbe impedito a questi oggetti di raccogliere i rifiuti, ma supponendo che io stia bene, ci sono delle trappole da tenere d'occhio?
per rendere il codice completamente indipendente dalle diverse versioni di Java/implementazioni, perché non solo wr si tratta di una classe per memorizzare da sé le informazioni su un errore e aggiornarle ogni volta che si verifica un errore. –
Oltre ai problemi universali con la statica in generale (ad es. Difficoltà di derisione, ecc.)? – CPerkins
das_weezul: si supponga che "seemLikeADifferentProblem" percorra la catena delle eccezioni. Sembra ripetitivo creare una struttura dati per duplicare sostanzialmente l'intera catena. – Mickalot