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 nullin einer Eigenschaftendatei darzustellen .
Aber hier ist eine Alternative, bei der null ohne verwendet wird, null-valuedamit 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.valueein 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
nullist 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).