Ist diese Art von Java-Ausnahmestil schlecht?

8

Ist es eine schlechte Übung, mehrere Versuche in einer Methode zu haben und den Code so zu strukturieren?

%Vor%     
Geo 23.02.2010, 08:46
quelle

10 Antworten

3

Dein Code liest sich so, als würdest du Teil 1 tun (und auflösen, wenn du IOException abfangen willst), den Teil ohne Ausnahmen machen und dann den methodThatMayThrowCustomException . Ihr Code kann buchstäblich nicht anders geschrieben werden und behält die gleiche Funktionalität. Das ist eine Übertreibung, aber jede andere Version wäre oberflächlich anders.

Dies ist nicht gleich:

%Vor%

und die Art, wie es ausgeführt würde, wenn eine der Exceptions ausgelöst wird, ist ganz anders. Wenn Sie nacheinander von Teil 1 wiederherstellen müssen, schlagen Sie Teil 2 auf jeden Fall vor, und fahren Sie dann mit Teil 3 fort. Sie können Ihren Code nicht wirklich anders schreiben.

Es ist nichts falsch daran, zwei catch-Blöcke zu haben, obwohl das Mischen von etwas, das eine IOException verursacht, mit etwas, das eine CustomException auslöst, eine Vermischung von Bedenken nahelegt, wodurch Ihr Code schwer zu verstehen ist. Aber so wie es ist, ist es nicht nur gültig, es ist der einzige Weg, um das zu tun, was du tust.

    
Dan Rosenstark 23.02.2010, 11:09
quelle
7

Wenn die Methode die Ausführung ohne Probleme fortsetzen kann, selbst wenn die angegebene Ausnahme auftritt, sollte dies in Ordnung sein.

In dem Fall, in dem die Exception in der Methode weiter unten Probleme verursachen sollte, würde ich sie aufblasen.

    
Adriaan Stander 23.02.2010 08:49
quelle
5

Nein, ist es nicht. Es ist ein guter Punkt, um bestimmte Ausnahmen zu fangen, wenn sie geworfen werden, imho ist es sicherlich besser als das:

%Vor%     
Alberto Zaccagni 23.02.2010 08:50
quelle
3

Sieht gut aus, aber es hängt davon ab, was methodThatMayThrowIOException und methodThatMayThrowCustomException tun und ob der Fehler der ersten ( methodThatMayThrowIOException ) die gesamte Methode whatever fehlschlagen sollte.

    
cherouvim 23.02.2010 08:48
quelle
3

Es hängt wirklich davon ab, was Sie vorhaben, wenn eine IOException ausgelöst wird. Dein Stil erlaubt dir, mehr Dinge zu tun, aber wenn du nicht vorhast, das auszunutzen, dann wird diese Absicht durch Verwendung des Standard-Idioms viel deutlicher.

%Vor%

Hier können Sie schnell sagen, dass wenn IOException ausgelöst wird, Sie nur tun, was innerhalb des catch-Blocks ist und nicht viel mehr.

    
polygenelubricants 23.02.2010 08:59
quelle
2

Ich sehe nicht, warum das eine schlechte Praxis wäre, solange Sie tatsächlich etwas Nützliches mit den Ausnahmen machen, die Sie gefangen haben.

    
extraneon 23.02.2010 08:49
quelle
1

Es gibt kein Problem damit, AFAICS. Allerdings ersticht mir in einer Methode 2 Versuch-Fang in meinen Augen. Wenn Sie das gleiche Gefühl haben, schlage ich vor, dass Sie es richtig umgestalten.

    
Adeel Ansari 23.02.2010 09:00
quelle
1

Nein. Das ist eine ziemlich gute Übung, um den Bereich einzuschränken, in dem einige Ausnahmen ausgelöst werden. Ich habe das in meinem Code sehr oft gemacht.

Wenn Sie jedoch sicher sind, dass in einem try ... catch-Block eine bestimmte Art von Exception nur durch eine eindeutige Funktion ausgelöst wird, ist es auch OK, sie in den gleichen try-Block zu setzen.

    
evanmeng 23.02.2010 09:03
quelle
0

Nun, es kommt darauf an, was Sie erreichen wollen. Normalerweise würde ein Codeblock in einen einzelnen try-catch-Block eingeschlossen, wenn der Codeblock als Block oder gar nicht ausgeführt werden soll, wenn eine Ausnahme auftritt. Wenn es nicht der Fall ist, dann glaube ich, dass es viel besser ist, die verschiedenen Codeblöcke zu isolieren, die verschiedene Ausnahmen in verschiedene try-catch-Blöcke werfen, die "mehr Sachen hier machen, die keine Ausnahme werfen". nur ein Gedanke!

    
ultrajohn 23.02.2010 08:56
quelle
0

Ich persönlich denke, es sieht überladen aus. Ich bevorzuge nur einen Versuch mit so vielen Fangblöcken, wie ich brauche. Es ist mir egal oder mehrere versuchen / fangen Sequenzen in einer einzigen Methode.

    
duffymo 23.02.2010 10:57
quelle

Tags und Links