2 Stimmen

Wie ruft man eine Methode aus einem Catch-Block in Java auf?

Erfordernis: Wenn es Ausnahmen gibt, rufen Sie eine Methode auf, die die Daten erneut prüft.

Meine Umsetzung:

private void one() {
    try {
        //Valid data
    }catch(Exception e) {
    two();
    }
}

private void two() {
     //Process data with another input
     //On entry,
     one();
}

Mir ist klar, dass meine Verwendung nicht korrekt ist. Wie sollte ich damit umgehen?

5voto

Peter Lawrey Punkte 511323

Sie können es genau so machen, wie Sie es vorschlagen, nämlich mit Rekursion. Ich weiß nicht, wo das Problem liegt. Ich persönlich finde die Verwendung einer Schleife in der Regel einfacher als eine Rekursion. Ich würde jedoch nicht einfach alle Ausnahmen abfangen. Sie werden wahrscheinlich verschiedene Ausnahmen unterschiedlich behandeln wollen.

private void one() {
  while(true) {
    try {
        //Valid data
        break;
    }catch(InvalidArgumentException e) { // or what ever you expect.
        two();
    }
  }
}

private void two() {
     //Process data with another input
     //On entry,
}

oder sogar

private void one() {
  while(true) {
    try {
        //Valid data
        break;
    } catch(InvalidArgumentException e) { // or what ever you expect.
        // Process data with another input
        // On entry,
    }
  }
}

1voto

TeaCupApp Punkte 11193

Besser wäre es, dies zu tun, Prüfen Sie die Daten in einer while-Schleife an anderer Stelle, bevor Sie die Daten in der Methode verwenden one() , Solange sie nicht gültig ist, korrigieren Sie sie, bis sie gültig ist, und geben Sie sie dann an one() .

Nach Ihren fraglichen Bemerkungen

machen Sie Ihre error zu einer Klassenebene und setzen Sie sie in der Methode two() wie diese,

private void two() {
     this.error = false;
     //Process data with another input
     //On entry,
     one();
}

Viel Glück!

0voto

Nrj Punkte 6513

Die Verwendung, die Sie im Code gezeigt haben, ist korrekt - Wie kommen Sie darauf, dass dies nicht korrekt ist?

Ich sehe jedoch, dass Sie sich an die ursprüngliche Methode in dem Fang erinnern, zu dem ich Bemerkungen gemacht habe -

  1. Wenn die Ausnahme weiterhin ausgelöst wird, führt dies zu einem Stapelüberlauf.
  2. Sie möchten eine vorbeugende/andere Logik haben, um zu prüfen, ob dies zeitabhängig ist oder sich die Bedingungen während der Anrufe geändert haben.
  3. Sie sollten eine Exit-Bedingung für den Fall vorsehen, dass Sie in einer Schleife stecken bleiben.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X