2017-07-12 1 views
0

In Java ist es ein Fehler beim Kompilieren, um eine Ausnahme abzufangen, die nicht im try-Block ausgelöst wird, aber es ist kein Fehler bei der Kompilierung deklarieren Sie eine ausgelöste checked-exception in einer Methode, auch wenn diese Methode diese Ausnahme nicht auslösen kann.Konfigurieren Sie den Java-Compiler für den Fehler, wenn die Methode nicht deklariert werden kann. Ausnahme

In Eclipse ist es jedoch möglich, dies über die Compiler-Konfiguration (http://help.eclipse.org/mars/index.jsp?topic=%2Forg.eclipse.jdt.doc.user%2Freference%2Fpreferences%2Fjava%2Fcompiler%2Fref-preferences-errors-warnings.htm) zu ändern.

Ist es möglich, dasselbe Verhalten während des standardmäßigen Java-Kompilierungsprozesses über Compiler-Flags zu erzeugen? Insbesondere möchte ich diese Überprüfung in einen Maven Build integrieren. Deklarierte Ausnahmen, die nicht ausgelöst werden können, erzeugen unnötige Catch-Blöcke, Fehlerbehandlungsroutinen und sogar Komponententests, die alle von der weiteren Fehlersuche und Erweiterung des vorhandenen Codes ablenken und unnötigen Aufwand zum Abfangen und Testen dieser Ausnahmen verursachen.

Können wir einen "saubereren" Kodierungsstandard über den Java-Compiler erzwingen?

Antwort

1

Können wir einen "saubereren" Codierungsstandard über den Java-Compiler erzwingen?

Für Versionen von Java bis zu Java 9, ist die Antwort Nein. Oder zumindest das ist, was das javac Handbuch sagt mir (7, 8 & 9).

Der sicherste Weg wäre, alle Warnungen zu aktivieren (-Xlint:all) und zu sehen, ob Sie eine Warnmeldung für eine redundante throws Klausel erhalten. Eigentlich


:

In Java, es ist ein Fehler bei der Kompilierung, um zu versuchen, eine Ausnahme zu fangen, die nicht im try-Block geworfen wird ...

dies gilt nur für geprüfte Ausnahmen. Der Compiler kann nicht feststellen, ob eine ungeprüfte Ausnahme ausgelöst werden kann ... in vielen Fällen.

+0

Ich ging davon aus, dass die throws-Deklaration von geprüften und ungeprüften Ausnahmen implizit und klar von meiner Frage war, aber nach dem erneuten Lesen haben Sie Recht. Ich habe es nicht explizit erwähnt. –

+0

Leider sogar mit -Xlint: javac kompiliert die folgende Methode ohne Fehler. öffentliche Klasse MyClass { public void test() löst java.io.IOException aus { System.err.println ("Keine Ausnahme hier!"); } } –

+0

Das war, was ich dachte, würde passieren. –

Verwandte Themen