Ich habe eine Funktion, die eine Schleife ausführt, während ich etwas mache, das eine Ausnahme auslösen könnte. Sieht in etwa so aus:Eine verknüpfte Liste von Ausnahmen in Java werfen
public void myFunction() throws MyException {
while(stuff) {
try {
DoSomething() // throws an exception
}
catch (Exception ex) {
throw new MyException(some, stuff, of, mine, ex);
}
}
}
Der Fehler, der die Ausnahme verursacht, ist wiederherstellbar. Es kann sich um einen SQL-Fehler in einer einzelnen update-Anweisung handeln, bei der die while-Schleife eine Reihe von update-Anweisungen ausführt. Oder ein Parsing-Fehler in einem einzelnen Datenstück, bei dem die Schleife mehrere Datenstücke verarbeitet. Ich muss die Ausnahme weiter oben in der Kette weiterleiten, damit der GUI-Teil des Programms es verarbeiten, verarbeiten und den Fehler an den Benutzer weitergeben kann. Aber ich möchte die Schleife in dieser speziellen Funktion nicht töten. Die anderen Dinge, die es tut, sind möglicherweise nicht ungültig. Der Fehler, der die Ausnahme verursacht hat, ist möglicherweise für die Funktion nicht tödlich.
Also meine Frage ist das: Ist es eine akzeptable Praxis, verknüpfte Listen von benutzerdefinierten Ausnahmen zu erstellen (wo jede Ausnahme ein Knoten ist, und die Ausnahme ist der Kopf der Liste geworfen) und dann den Kopf der Liste zu werfen (falls vorhanden) sobald die Schleife beendet ist?
Hat jemand das schon mal gesehen? Kann jemand an mögliche Probleme denken? Kann jemand an andere, bessere Möglichkeiten denken, mit dem Grundproblem umzugehen: die Notwendigkeit, mehrere nicht verwandte Ausnahmen zu verwerfen, ohne die Funktion zu verlassen, bis sie erledigt ist?
Hier ist ein Beispiel dafür, wie die Verknüpfung und werfen könnten sehr einfach realisiert werden:
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;
}
Durch die Art und Weise. Darüber hinaus verwenden Sie eine verknüpfte Liste hier oder nicht. Es gibt eine Klasse 'java.util.LinkedList', die sofort verwendet werden kann, so dass Sie ihre Funktionen nicht in Ihren Objekt-Objekten programmieren müssen (in diesem Fall' MyException'). – helios
Ich bin mir dessen bewusst. Ich dachte nicht, dass du es in diesem Fall benutzen könntest, weil die Liste geworfen werden muss und LinkedList nicht umwerfbar ist. –