Werfen Sie eine Verknüpfte Liste von Ausnahmen in Java

Ich habe eine Funktion, die Schleifen, während etwas zu tun, könnte eine exception werfen. Sieht ungefähr so aus:

public void myFunction() throws MyException {
    while(stuff) {
        try {
            DoSomething() //throws an exception
        }
        catch (Exception ex) {
            throw new MyException(some, stuff, of, mine, ex);
        }
    }
}

Den Fehler verursacht die Ausnahme ist erstattungsfähig. Es kann so etwas wie ein SQL-Fehler in einem einzigen update-Anweisung, wo die while-Schleife führt eine Reihe von update-Anweisungen. Oder ein parsing-Fehler in einem einzigen Stück von Daten, wobei die Schleife ist die Verarbeitung mehrerer Daten. Ich übergeben zu müssen, die Ausnahme weiter oben in der Kette, so dass der GUI-Teil des Programms kann es verarbeiten, verarbeiten ihn und leiten die Fehler an den Benutzer. Aber ich will nicht zu töten, die Schleife in dieser bestimmten Funktion. Die anderen Dinge, die es tut vielleicht nicht ungültig. Der Fehler, der die Ausnahme verursacht hat, könnte nicht fatale Folgen für die Funktion.

Also meine Frage ist: Ist es eine akzeptable Praxis zu bauen Linklisten von benutzerdefinierten Ausnahmen (jede Ausnahme ist ein Knoten, und die Ausnahme, die ausgelöst wird der Kopf der Liste) und dann werfen Sie den Kopf der Liste (falls vorhanden), sobald die Schleife beendet wird?

Hat sich schon mal jemand gesehen, der das gemacht? Kann jemand denken, mögliche Probleme dabei? Kann jemand denken, der andere, bessere Möglichkeiten zur Bewältigung der root-problem: die brauchen um darauf zu verzichten, mehrere unterschiedliche exceptions mit heraus verlassen der Funktion, bis es fertig ist?

Hier ist ein Beispiel, wie die Verknüpfung und werfen Sie umgesetzt werden könnten, sehr einfach:

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 ist oder nicht. Es gibt eine Klasse java.util.LinkedList bereit zu verwenden, so dass Sie nicht haben, um das Programm seine Funktion in Ihrem Element-Objekte (in diesem Fall MyException).
  • Ich bin mir dessen bewusst. Ich glaube nicht, Sie können es verwenden, in diesem Fall, denn die Liste muss geworfen werden und LinkedList ist nicht ein throwable.
Schreibe einen Kommentar