Was ist der beste Weg, um eine IllegalArgumentException abzufangen?

7

Wann wäre diese Art von Ausnahme am besten geeignet und wird sie ordnungsgemäß gehandhabt, wenn sie in einem solchen Fall gefangen wird?

%Vor%

Oder muss es explizit abgefangen werden?

%Vor%     
ChadNC 22.01.2010, 13:43
quelle

4 Antworten

12

Es würde von der ersten gefangen werden - aber auch eine Reihe anderer Ausnahmen. Sie sollten nicht mehr fangen, als Sie wirklich wollen.

Die zweite ist besser, wenn Sie haben , um es zu fangen ... aber normalerweise dies deutet auf einen Fehler im aufrufenden Code hin. Manchmal ist dies der Fall einer anderen Methode, die nicht ihre Argumente validiert usw. In einer idealen Welt sollte eine Möglichkeit für den Aufrufer sein, den Wert vorher zu validieren, wenn IllegalArgumentException geworfen wird oder eine Version aufrufen, die auf nicht außergewöhnliche Weise fehlschlägt (z. B. das TryParse -Muster in .NET, das zugegebenermaßen in Java schwieriger ist, ohne out -Parameter). Das ist nicht immer der Fall, aber jedes Mal, wenn Sie IllegalArgumentException erhalten, sollten Sie überprüfen, ob Sie es vermeiden konnten, indem Sie die Werte überprüfen, bevor Sie die Methode aufrufen.

    
Jon Skeet 22.01.2010, 13:45
quelle
7

Sie sollten keine IllegalArgumentException behandeln. Es ist der Zweck, den Entwickler zu informieren, dass er eine Methode mit falschen Argumenten aufgerufen hat. Lösung ist, die Methode mit anderen Argumenten aufzurufen.

Wenn Sie es fangen müssen, sollten Sie

verwenden %Vor%     
Arne 22.01.2010 13:45
quelle
3

Sie sollten sich von catch (Exception) fernhalten, da Sie auf diese Weise jede mögliche Ausnahme abfangen können. Wenn Sie wirklich nur das IllegalArgumentException erwarten und den Fall behandeln, sollten Sie diesen Bereich nicht erweitern. fügen Sie besser weitere catch-Blöcke für andere Arten von Ausnahmen hinzu, dann.

    
Joey 22.01.2010 13:45
quelle
0

Es kommt wirklich auf den Fall an, entweder ist es in sich richtig. Ohne den Umfang der Frage einzuschränken, ist es ein bisschen schwierig, ein "bestes Beispiel" zu geben.

    
cjstehno 22.01.2010 13:45
quelle

Tags und Links