Welche Ausnahme soll ausgelöst werden, wenn ein wichtiger Parameter/eine wichtige Abhängigkeit fehlt?

Lesezeit: 3 Minuten

Benutzer-Avatar
Pentium10

Nehmen Sie diese Methode

/**
 * @return List of group IDs the person belongs to
 *
 */
public List<String> getGroups() {
    if (this.getId().equals("")) return null;
}

Ich möchte eine Ausnahme auslösen, anstatt null zurückzugeben. Was ist die Ausnahme, die ausgelöst werden soll, wenn ein wichtiger Parameter/eine wichtige Abhängigkeit nicht festgelegt wurde?

  • Dieser Code löst eine NPE aus, wenn getID() gibt null zurück. Es wäre besser zu verwenden if ("".equals(this.getId())) ...

    – a’r

    25. März 2010 um 17:47 Uhr

  • Ich habe das in einer abstrakten Klasse definiert und es gibt einen Try-Catch im Inneren, der bei einem Fehler eine leere Zeichenfolge zurückgibt.

    – Pentium10

    25. März 2010 um 17:51 Uhr


Benutzer-Avatar
BalusC

Ich würde verwenden IllegalArgumentException wenn der Parameter/das Argument von außen gesteuert wird, oder IllegalStateException wenn die Methode nur im falschen Moment (Zustand) aufgerufen wird. In Ihrem speziellen Fall denke ich, dass es letzteres ist. Eine (zweifelhafte) Alternative ist NullPointerException.

Dies sollte jedoch ausdrücklich in der dokumentiert werden @throws damit der Benutzer den Grund versteht.

  • Der Kontext der Frage ist in der Tat begrenzt. Soweit ich das beurteilen kann, ist die ISE die beste Wahl. Ich habe das auch ausdrücklich gesagt, also sehe ich nicht, wie schlimm das ist 🙂

    – BalusC

    25. März 2010 um 17:44 Uhr


  • Gibt es eine Magie, wie ich den Kommentarbereich in Eclipse aktualisieren kann, um fehlende @params automatisch zu regenerieren und den @throws-Bereich hinzuzufügen? Vielleicht eine Abkürzung?

    – Pentium10

    25. März 2010 um 17:46 Uhr

  • Tut mir leid, das weiß ich nicht. Es wird automatisch für Nicht-Laufzeit-Ausnahmen hinzugefügt (wenn Sie die throws -Klausel), aber nicht für Laufzeitausnahmen.

    – BalusC

    25. März 2010 um 17:55 Uhr

  • In Eclipse können Sie ‘Alt-Shift-J’ verwenden, wenn sich der Cursor am Anfang Ihrer Methodendeklaration befindet, um den Methoden-Javadoc-Kommentar zu generieren. Dadurch wird ein neuer Javadoc-Block für Sie generiert, der jedoch nicht zu dem hinzugefügt wird, was vorhanden ist. Daher bin ich mir nicht sicher, ob er für vorhandene dokumentierte Methoden so hilfreich ist.

    – Elduff

    25. März 2010 um 20:19 Uhr


Wie wäre es mit Illegale staatliche Ausnahme?

Ich würde eine IllegalStateException verwenden, da die ID der Zustand des Eigentümers ist. Wenn die id als Parameter übergeben worden wäre, wäre eine IllegalArgumentException richtig.

Benutzer-Avatar
aephyx

Anstatt eine Ausnahme auszulösen, sollten Sie einfach eine leere Liste zurückgeben. Wenn eine Abhängigkeit/ein Parameter nicht erfüllt ist, gibt es keine Ergebnisse. Aus den geposteten Kommentaren und dem Code geht hervor, dass dies das erwartete Verhalten ist. Wenn die ID leer ist, sind keine Gruppen angehängt, also eine leere Liste.

Ich würde meinen eigenen Exception-Typ erstellen, indem ich Exception erweitere. Auf diese Weise können aufrufende Funktionen diese bestimmte Ausnahme abfangen und entsprechend angemessen behandeln. Beachten Sie, dass Sie dasselbe mit fast allem tun können, was Ausnahmen erweitert, aber ich ziehe es vor, meine eigenen Ausnahmeklassen zu erstellen, damit ich in meiner Ausnahmebehandlung sehr robust sein kann. Dies bleibt natürlich Ihnen überlassen.

  • Warum das Rad neu erfinden? IllegalArgumentException wird genau für ein illegales Argument gemacht.

    – Steve Kuo

    25. März 2010 um 18:18 Uhr

  • Es hängt davon ab, für wie viele verschiedene Arten von illegalen Argumenten Sie eine Falle stellen möchten. Ich erweitere gerne Exception, oder in diesem Fall IllegalArgumentException, nur um eine bestimmte Exception-Klasse zu haben, die mit verschiedenen Arten von Bedingungen umgeht, mit denen ich umgehen möchte. Es macht die Verarbeitung von Ausnahmen einfacher und robuster, IMHO. -Jay

    – Jay

    25. März 2010 um 18:41 Uhr

  • Warum das Rad neu erfinden? IllegalArgumentException wird genau für ein illegales Argument gemacht.

    – Steve Kuo

    25. März 2010 um 18:18 Uhr

  • Es hängt davon ab, für wie viele verschiedene Arten von illegalen Argumenten Sie eine Falle stellen möchten. Ich erweitere gerne Exception, oder in diesem Fall IllegalArgumentException, nur um eine bestimmte Exception-Klasse zu haben, die mit verschiedenen Arten von Bedingungen umgeht, mit denen ich umgehen möchte. Es macht die Verarbeitung von Ausnahmen einfacher und robuster, IMHO. -Jay

    – Jay

    25. März 2010 um 18:41 Uhr

1158070cookie-checkWelche Ausnahme soll ausgelöst werden, wenn ein wichtiger Parameter/eine wichtige Abhängigkeit fehlt?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy