Werfen kann verwendet werden, anstelle von break in einer switch-Anweisung?
Werfen kann auch verwendet werden, um exit switch-Anweisung ohne break-Schlüsselwort? Warum werfen anstatt zu brechen?
switch(number)
{
case 1:
throw new RuntimeException("Exception number 1");
case 2:
throw new RuntimeException("Exception number 2");
}
- Man sollte es nicht. Ausnahmen sollten niemals verwendet werden, für die Steuerung der Strömung. Ausnahmen für Ausnahmen. Wenn eine Ausnahme Auftritt innerhalb des Schalters, dann ist es gut.
- Weil Sie bezahlt werden, indem Sie die Anzahl der Zeichen, die Sie eingeben
- Das man vernünftig standard, könnten Sie throw innerhalb einer switch-Anweisung im default-Fall. Wenn das erreichen dieser Fall zeigt ungültige Eingabe, dann ist es sinnvoll, eine exception zu werfen.
- Es ist nichts besonderes über switch-Anweisungen mit Bezug auf die Ausnahmen. Die Gründe für das auslösen von Ausnahmen sind die gleichen wie in den anderen code.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es zwei Fälle, in denen könnte man eine
throw
zu unterbrechen den Fluss der ein-Schalter:Flow Control; im Allgemeinen ist dies ein bad Praxis - Sie wollen nicht außergewöhnliche Verhalten der Entscheidung, wo Sie Ihr Programm entscheidet, zu gehen weiter.
Unwahrscheinlichen, aber plausibel standardmäßig der Fall; in Fall, dass Sie hit ein Zustand, in dem das erreichen der Standard - sollte unmöglich, aber doch passiert. Irgendwie. Wie durch ein Wunder. Oder, wenn Sie haben strenge coding-standards, die vorschreiben, dass switch-Anweisungen müssen einen default-Fall.
Beispiel:
Sehe ich einige Gründe für den Wurf in einer switch-Anweisung.
1.: nicht anstatt eine Pause, aber als der Körper des
default
Fall. Betrachten Sie das folgende Beispiel, wo ein Schalter ist definiert eine enumeration:Den Schalter der Zeit, wie es zuerst geschrieben, der wie folgt aussieht:
Der throw ist ein fallback für künftige Erweiterungen der Aufzählung
E
.2.: Manchmal habe ich bei denen kleine getter-Funktionen, zum Beispiel in die Swing-Tabelle Modell. Dort habe ich auch ein return anstelle von break;
Dies ist aus Gründen der Kürze oder Kompaktheit. Man kann sagen, dass diese Renditen brechen die Ablaufsteuerung. Dies ist die wahre. Ich denke aber, dass für die Kompaktheit Gründe könnte es erlaubt sein hier.
Wenn Sie akzeptieren
return
statt einerbreak
in diesem Fall können Sie akzeptierenthrow
auch hier.Können Sie
throw
imswitch
block, aber nicht gute coding/design-Praxis.throw
gedacht, um außergewöhnliche Kontrolle/error situation code nicht für die Kontrolle der Ausführung der Anweisungen.Eventhough Sie können
throw
imswitch
würde ich recommded, es nicht zu verwenden inswitch
. 🙂Du redest nur ein Szenario, wo Sie brauchen, um werfen der Ausnahme. der switch ist konzipiert, um einen Fall und es brechen. Wenn es in einer Methode und wenn man nur werfen, wie werden wir dann zurückgeben einen Wert aus dieser Methode?
In einfachen Worten werfen, wird wieder die Methode, aber brechen nicht. Können Sie weiterhin mit Ihrem code nach dem Umschalten mit Pause aber nicht mit werfen.
Pause wird verwendet, um zu verhindern, fallen durch, um den nächsten Fall, wenn Sie eine exception werfen, wird es keine fallenden thru
Es in der Regel sinnvoll, eine Ausnahme in der sonst Klausel
Gibt es wenige Probleme mit werfen, anstatt break;
1), wenn Sie werfen einige Ausnahme der Ausführung der rest der Funktion beendet.
ie:
2) Ausnahmen von der Regel stellen einige Fehler,und wechseln nicht jedes mal erstellen, die Ausnahme.
3), Um den Wert "Ausnahme Nummer 1" von
müssen Sie wright catch-block und rufen Sie e.getMessage();
wie:
dies ist noch mehr Aufwand und auch die Daten, die Sie übergeben können, ist nur String-Objekt.
Fazit:-
Es ist besser, verwenden Sie die normale Pause.
werfen Kann nicht verwendet werden, anstelle von break in einer switch-Anweisung. denn werfen ist nur für Ausnahmen verwendet, während Schalter verwendet wird für die bedingte Zwecke...
throw
nebenreturn
oderbreak
imswitch
, da alle drei von Ihnen vollständige abrupt (das ist, die Steuerung wieder an einem anderen Ort als dem aktuell Laufenden Methode).