Heim >Java >javaLernprogramm >Warum lehnen Entwickler geprüfte Ausnahmen in Java ab?
Gegen geprüfte Ausnahmen
Viele Jahre lang konnte ich keine zufriedenstellende Antwort auf die folgende Frage bekommen: Warum sind manche Entwickler so dagegen? auf geprüfte Ausnahmen? Ich habe viele Gespräche geführt, Blogbeiträge gelesen und die Meinungen von Bruce Eckel gelesen (der sich als erster gegen geprüfte Ausnahmen ausgesprochen hat).
Ich schreibe gerade neuen Code und achte sehr darauf, wie Ausnahmen behandelt werden. Ich versuche, die Perspektive der „Wir mögen keine geprüften Ausnahmen“-Menge zu verstehen, aber ich verstehe sie immer noch nicht.
Jedes Gespräch, das ich jemals geführt habe, endete mit der gleichen ungelösten Frage ... Lassen Sie mich näher darauf eingehen:
Im Allgemeinen (durch das Design von Java),
Ein Argument, das ich oft höre, ist, dass der Entwickler beim Auftreten einer Ausnahme nur das Programm beenden muss.
Ein weiteres häufiges Argument, das ich höre, ist, dass geprüfte Ausnahmen die Umgestaltung von Code erschweren.
Für das „Ich höre auf“-Argument müssen Sie auch dann noch eine sinnvolle Fehlermeldung anzeigen, wenn Sie aufhören. Wenn Sie die Fehlerbehandlung nur hinauszögern, werden Ihre Benutzer nicht allzu glücklich sein, wenn das Programm ohne einen klaren Grund für das Beenden beendet wird.
Für die Zielgruppe „Es macht Refactoring schwierig“ deutet dies darauf hin, dass nicht die geeignete Abstraktionsebene gewählt wurde. Anstatt eine Methode zum Auslösen einer IOException zu deklarieren, sollte die IOException in eine Ausnahme konvertiert werden, die besser für das Geschehen geeignet ist.
Ich finde es nicht toll, Mains „catch(Exception)“ (oder in manchen Fällen „catch(Throwable)“) einzuschließen, was sicherstellt, dass das Programm ordnungsgemäß beendet wird, aber ich fange immer die spezifischen Ausnahmen ab, die ich benötige. Dadurch ist es möglich Ich möchte zumindest eine richtige Fehlermeldung anzeigen
Die Frage, die die Leute nie beantworten, ist:
Wenn Sie eine RuntimeException
-Unterklasse anstelle einer Exception
-Unterklasse auslösen, woher wissen Sie dann, was
abfangen soll?
Wenn die Antwort darin besteht, eine Ausnahme abzufangen, behandeln Sie Programmiererfehler immer noch auf die gleiche Weise wie Systemausnahmen. Das kommt mir falsch vor.
Wenn Sie Throwable abfangen, behandeln Sie Systemausnahmen und VM-Fehler (und ähnliche Fehler) immer noch auf die gleiche Weise. Das kommt mir falsch vor.
Wenn die Antwort darin besteht, nur Ausnahmen abzufangen, von denen Sie wissen, dass sie ausgelöst werden, woher wissen Sie dann, welche Ausnahmen ausgelöst wurden? Was passiert, wenn Programmierer X eine neue Ausnahme auslöst und vergisst, sie abzufangen? Meiner Meinung nach ist das gefährlich.
Ich würde sagen, dass die Meldung, die den Stack-Trace anzeigen würde, falsch ist. Denken das nicht auch Leute, die keine geprüften Ausnahmen mögen?
Wenn Sie also keine aktivierten Ausnahmen mögen, können Sie erklären, warum nicht, und bitte die unbeantwortete Frage beantworten.
Ich suche nicht nach Ratschlägen, wann man eines der beiden Modelle verwenden sollte, sondern nach warum Leuten, die von RuntimeException aus erweitern, aber nicht von Exception, und/oder der Grund, warum sie die RuntimeException erneut auslösen, nachdem sie die Ausnahme abgefangen haben, anstatt Würfe zur Methode hinzuzufügen. Ich würde gerne die Beweggründe der Leute verstehen, die überprüfte Ausnahmen nicht mögen.
Das obige ist der detaillierte Inhalt vonWarum lehnen Entwickler geprüfte Ausnahmen in Java ab?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!