Angenommen, ich habe eine Systemeigenschaft MY_PROP
:
Diese Eigenschaft ist notwendig, damit mein System funktioniert.
Was ist die richtige Ausnahme zu werfen, wenn diese Eigenschaft nicht gesetzt ist?
%Vor% Irgendwie fühlt sich IllegalArgumentException
nicht richtig. Vielleicht IllegalStateException
, MissingResourceException
, TypeNotPresentException
? Was ist die Standardpraxis für dieses Szenario?
Es gibt keine. Ich würde das IllegalStateException
werfen, weil Sie den Parameter vermissen. Dies bedeutet, dass der Konfigurationsvalidierer fehlgeschlagen ist und Ihre Anwendung einen ungültigen Status aufweist. Mit anderen Worten, Sie sollten nie init()
aufrufen können.
Wenn der Wert des Parameters ungültig wäre, würde ich ein IllegalArgumentException
werfen.
Wenn Sie einen Validator schreiben, sollten Sie sich entscheiden, ob Sie RuntimeException
verwenden oder einen markieren möchten. Wenn Sie beispielsweise "javax.naming.ConfigurationException" verwenden oder eine eigene Konfigurationsausnahme erstellt haben. Ihr API wird in der Lage sein, eine solche Ausnahme zu handhaben und in Bezug auf Legacy korrekt zu reagieren.
Definitionen:
IllegalStateException - Signalisiert das Eine Methode wurde zu einer illegalen oder unangemessenen Zeit aufgerufen. Mit anderen Worten, die Java-Umgebung oder Java-Anwendung befindet sich nicht in einem geeigneten Zustand für die angeforderte Operation.
IllegalArgumentException - Wird ausgelöst Geben Sie an, dass eine Methode als unzulässiges oder unangemessenes Argument übergeben wurde.
Ich füge nur Vashs Antwort für das Spring Framework hinzu. Wenn Sie das Spring Framework verwenden und mit den meisten Komponenten in Spring konsistent sein möchten, würde ich sagen, dass Sie IllegalStateException (oder Ihre eigene Ableitung) verwenden sollten.
Im Frühjahr die meisten Komponenten, die eine @PostConstruct
oder @Override void afterPropertiesSet()
werfen% IllegalStateException
mit der util org.springframework.util.Assert.state(..)
.
Sie können dies in Spring AMQP als ein Beispiel.
Davon abgesehen habe ich tatsächlich Bugs gegen Spring MVC eingereicht, wo sie IllegalArgumentException anstelle einer benutzerdefinierten und mehr verwendet haben explizit abgeleitete Klasse. Mit statischen Inline-Klassen ist es sehr einfach, eine benutzerdefinierte Ausnahme zu erstellen, ohne eine andere Java-Datei zu erstellen.
Da eine Systemeigenschaft nicht immer definiert ist, sollte die Standardmethode einen Standardwert verwenden, wenn Sie die Eigenschaft nicht finden können.
Ich habe gerade einige Standard-Code in Java 7 (Apache Tomcat, java.lang, java.awt, ...) überprüft, sie verwenden immer einen Standard "Fallback", wenn die Eigenschaft null
ist.
Vielleicht ist Ihr Problem woanders?
Warum nimmst du diese Parameter nicht als notwendiges Argument für dein Glas? Dann können Sie IllegalArgumentException
verwenden.
Tags und Links java