Heim > Java > javaLernprogramm > Hauptteil

Warum lehnen einige Entwickler geprüfte Ausnahmen in Java ab?

Linda Hamilton
Freigeben: 2024-11-19 07:17:02
Original
828 Leute haben es durchsucht

Why Do Some Developers Oppose Checked Exceptions in Java?

Einspruch gegen geprüfte Ausnahme

Seit Jahren bekomme ich keine vernünftige Antwort auf die Frage: Warum sind manche Entwickler so dagegen? überprüft anormal? Ich habe mehrere Gespräche geführt, Blogbeiträge gelesen und Bruce Eckels Sichtweise gelesen (er ist der erste Mensch, den ich je gesehen habe, der sich dagegen ausgesprochen hat).

Ich schreibe gerade neuen Code und achte sehr darauf, wie ich mit Ausnahmen umgehe. Ich versuche, die Meinung der Leute zu verstehen, die sagen: „Wir mögen keine geprüften Ausnahmen“, aber ich kann sie immer noch nicht verstehen.

Jedes Gespräch, das ich geführt habe, endete mit der gleichen Frage ohne Antwort ... Lassen Sie mich Folgendes einrichten:

Im Allgemeinen (durch das Design von Java)

  • Error wird für Dinge verwendet, die niemals abgefangen werden sollten (die VM ist allergisch gegen Erdnüsse und jemand hat ein Glas Erdnüsse darüber geschüttet)
  • RuntimeException wird für Dinge verwendet, die der Programmierer falsch gemacht hat (der Programmierer verließ das Array-Ende)
  • Ausnahme (außer RuntimeException) wird für Dinge verwendet, die außerhalb der Kontrolle des Programmierers liegen (die Festplatte ist beim Schreiben in das Dateisystem voll, das Datei-Handle-Limit des Prozesses wurde erreicht, keine Dateien mehr kann geöffnet werden)
  • Throwable ist nur die übergeordnete Klasse aller Ausnahmetypen.

Eine Aussage, die ich oft höre, ist, dass der Entwickler beim Auftreten einer Ausnahme nur das Programm beenden kann.

Ein weiteres häufiges Argument, das ich höre, ist, dass geprüfte Ausnahmen die Umgestaltung von Code erschweren.

Was das „Ich habe einfach aufgehört“-Argument angeht, möchte ich damit sagen, dass Sie selbst dann, wenn Sie aufhören, eine vernünftige Fehlermeldung anzeigen müssen. Wenn Sie die Behandlung von Fehlern einfach vermeiden, werden Ihre Benutzer nicht allzu glücklich sein, wenn das Programm ohne klare Angabe des Grundes beendet wird.

Für die „Es macht Refactoring schwierig“-Leute deutet dies darauf hin, dass nicht die geeignete Abstraktionsebene gewählt wurde. Anstatt zu deklarieren, dass eine Methode eine IOException auslöst, sollte die IOException in eine Ausnahme umgewandelt werden, die für das Geschehen besser geeignet ist.

Ich habe kein Problem damit, Main mit „catch(Exception)“ (oder in einigen Fällen „catch(Throwable)“) zu umschließen, um sicherzustellen, dass das Programm ordnungsgemäß beendet wird – aber ich fange immer die spezifische Ausnahme ab, die ich abfangen muss. Auf diese Weise tun Sie es zumindest Erlauben Sie mir, eine richtige Fehlermeldung anzuzeigen

Die Frage, die die Leute nie beantworten, ist diese:


Wenn Sie stattdessen eine RuntimeException
-Unterklasse auslösen Ausnahme
, woher wissen Sie also
was Sie abfangen sollten?


Wenn die Antwort „Abfangende Ausnahme“ lautet, behandeln Sie auch Systemausnahmen auf die gleiche Weise wie ein Programmierer. Das scheint mir falsch zu sein

Wenn Sie Throwable abfangen, dann behandeln Sie Systemausnahmen und VM-Fehler auf die gleiche Weise (usw.). Das scheint mir falsch zu sein Die Antwort ist, dass Sie nur Ausnahmen abfangen, von denen Sie wissen, dass sie ausgelöst werden. Woher wissen Sie dann, welche Ausnahmen ausgelöst werden, wenn Programmierer X eine neue Ausnahme auslöst und vergisst, sie abzufangen? >.

Ich würde sagen, dass das Programm, das den Stack-Trace anzeigt, falsch ist. Denken das nicht Leute, die keine geprüften Ausnahmen mögen?

Wenn Sie also keine geprüften Ausnahmen mögen, können Sie erklären, warum? Und diese unbeantwortete Frage beantworten?

Ich suche nicht nach Ratschlägen zur Verwendung eines der beiden Modelle, sondern nach den Gründen, warum Leute von RuntimeException statt von Exception aus erweitern und warum sie die Ausnahme abfangen und dann erneut auslösen eins, anstatt ihren Methoden einen RuntimeException-Wurf hinzuzufügen. Ich würde gerne die Motivation dafür verstehen, dass geprüfte Ausnahmen nicht gefallen.

Das obige ist der detaillierte Inhalt vonWarum lehnen einige Entwickler geprüfte Ausnahmen in Java ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage