Ho una funzione che si interrompe mentre si fa qualcosa che potrebbe generare un'eccezione. Assomiglia a questo:Lancio di un elenco collegato di eccezioni in Java
public void myFunction() throws MyException {
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
throw new MyException(some, stuff, of, mine, ex);
}
}
}
L'errore che causa l'eccezione è recuperabile. Può essere qualcosa di simile a un errore SQL in una singola istruzione di aggiornamento in cui il ciclo while esegue una serie di istruzioni di aggiornamento. O un errore di analisi in un singolo pezzo di dati, in cui il loop sta elaborando più pezzi di dati. Devo passare l'eccezione più in alto sulla catena in modo che la parte GUI del programma possa elaborarla, gestirla e trasmettere l'errore all'utente. Ma non voglio uccidere il ciclo in questa particolare funzione. Le altre cose che sta facendo potrebbero non essere non valide. L'errore che ha causato l'eccezione potrebbe non essere fatale per la funzione.
Quindi la mia domanda è questa: È una pratica accettabile creare elenchi collegati di eccezioni personalizzate (dove ogni eccezione è un nodo e l'eccezione generata è il capo dell'elenco) e quindi lanciare il capo dell'elenco (se c'è) una volta che il ciclo finisce?
Qualcuno l'ha mai visto? Qualcuno può pensare a potenziali problemi con questo? Qualcuno può pensare ad altri, modi migliori per gestire il problema di root: la necessità di passare più eccezioni non correlate senza uscire dalla funzione fino a quando non viene eseguita?
Ecco un esempio di come il collegamento e un tiro potrebbero essere attuate in modo molto semplice:
public void myFunction() throws MyException {
MyException head = null;
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
MyException tmp = new MyException(some, stuff, of, mine, ex);
tmp.next(head);
head = tmp;
}
}
if(head != null)
throw head;
}
proposito. Oltre a te usi una lista collegata qui o no. C'è una classe 'java.util.LinkedList' pronta per l'uso, quindi non devi programmare il suo funzionamento all'interno degli oggetti oggetto (in questo caso,' MyException'). – helios
Ne sono consapevole. Non pensavo che potessi usarlo in questo caso, perché la lista deve essere lanciata e LinkedList non è un throwable. –