Ich habe einige Fragen bezüglich der Behandlung von Ausnahmen in Java. Ich habe ein bisschen darüber gelesen und einige widersprüchliche Richtlinien bekommen.Good Practices für die Behandlung von Java-Ausnahmen
Best Practices for Exception Handling
die durch die erwähnten Artikel gehen lassen:
Darin heißt es, dass man in der Regel wenn „Client-Code kann nichts tun“ mit geprüften Ausnahmen vermeiden sollte. Aber was genau bedeutet das? Wird in der GUI eine Fehlermeldung angezeigt, die einen Grund für das Überspringen der geprüften Ausnahme bietet? Aber es würde den GUI-Programmierer zwingen, sich daran zu erinnern, RuntimeExceptions und ihre Nachkommen zu erfassen, um potentielle Fehlerinformationen anzuzeigen.
Die zweite in diesem Artikel vorgestellte Ansicht ist, dass man sich die Erfindung eigener Ausnahmeklassen entziehen sollte, es sei denn, ich möchte einige Zollfelder/Methoden in ihnen implementieren. Im Allgemeinen stimme ich damit nicht überein, meine Praxis heute war genau das Gegenteil: Ich habe Ausnahmen in meiner eigenen Ausnahmestruktur zu Reflexzielen zusammengefasst, die von Klassen realisiert wurden, die ich schreibe, auch wenn sie Exception erweitern, ohne neue Methoden hinzuzufügen. Ich denke, es hilft, sie in den höheren Schichten flexibler zu handhaben, wenn sie geworfen werden, und es ist im Allgemeinen klarer und verständlicher für Programmierer, die diese Klassen verwenden werden.
Ich implementierte einige Code heute 'neue Art' in dem Artikel präsentiert wirft RuntimeException hier und da, dann lasse ich Sonar analysieren. Um mich noch mehr zu verwirren, markierte Sonar meine RuntimeExceptions als Major errors mit einer Nachricht wie "Vermeiden Sie Root-Ausnahmen zu werfen, wrap'em in Ihren eigenen Typen".
So sieht es ziemlich kontrovers aus, was denkst du?
Ich habe auch von einem der heutigen Tech-Leads gehört, dass das Auspacken von Ausnahmen schlecht ist, "weil es für JVM eine wirklich kostspielige Operation ist". Für mich, auf der anderen Seite werfen SQLExceptions oder IOExceptions überall sieht aus wie ein bisschen kaputt Kapselung.
Also was ist Ihre allgemeine Einstellung zu Fragen, die ich hier vorgestellt?
Wenn Ausnahmen in meiner eigenen Art wickeln, wenn ich soll das nicht tun?
Wo dieser Punkt von ‚Client kann nichts dagegen tun, werfen Runtime-Ausnahme? '
Was ist mit Leistungsproblemen?
Leider ist dies nicht konstruktiv für SO wie in den FAQ. Sie können versuchen, programs.stackexchange.com - das heißt, kaufen "Effective Java" von Joshua Bloch. Jeder, der Java ernst nimmt, sollte eine Kopie besitzen. –
Ich würde dies definitiv zu Programmers.SE migrieren, wenn ich könnte. Gab es eine Zeit, als wir das tun konnten? Oder habe ich mich immer nur auf diese Zeit gefreut? –
https://today.java.net/pub/a/today/2006/04/06/exception-handling-antipatterns.html ist eine schöne Liste von guten Praktiken – bla