Ich gebe @nosebrain Kredit, da ich nicht über "Nullwert" Bescheid wusste, aber ich bevorzuge es, die Verwendung von Nullwerten insgesamt zu vermeiden, insbesondere da es schwierig ist, sie null
in einer Eigenschaftendatei darzustellen .
Aber hier ist eine Alternative, bei der null ohne verwendet wird, null-value
damit sie mit jedem Platzhalter für Eigenschaften funktioniert.
public class MyObject {
private String value;
@Value("${stuff.value:@null}")
public void setValue(String value) {
if ("@null".equals(value)) this.value = null;
else this.value = value;
}
}
Persönlich bevorzuge ich meinen Weg, weil Sie vielleicht später stuff.value
ein durch Kommas getrennter Wert sein möchten oder vielleicht ist es einfacher, den Schalter aufzuschreiben. Es ist auch einfacher zu testen :)
BEARBEITEN: basierend auf Ihren Kommentaren zur Verwendung von Aufzählungen und meiner Meinung, keine Null zu verwenden.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Das obige funktioniert gut für mich. Sie vermeiden null. Wenn Ihre Eigenschaftendateien explizit festlegen möchten, dass sie nicht damit umgehen möchten, tun Sie dies ( aber Sie müssen dies nicht einmal angeben, da dies standardmäßig NOTSET ist ).
crap=NOTSET
null
ist sehr schlecht und ist anders als NOTSET
. Dies bedeutet, dass der Feder- oder Komponententest ihn nicht eingestellt hat, weshalb IMHO ein Unterschied besteht. Ich würde wahrscheinlich immer noch die Setter-Notation (vorheriges Beispiel) verwenden, um den Unit-Test zu vereinfachen (private Variablen sind in einem Unit-Test schwer zu setzen).