Daję zasługę @nosebrain, ponieważ nie wiedziałem o „wartości null”, ale wolę całkowicie unikać używania wartości null, szczególnie, że jest to trudne do przedstawienia nullw pliku właściwości.
Ale tutaj jest alternatywa używania null bez out, null-valuewięc będzie działać z każdym symbolem zastępczym właściwości.
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;
}
}
Osobiście wolę mój sposób, ponieważ może później chcesz stuff.valuebyć wartością oddzieloną przecinkami lub może do Enum, przełącznik jest łatwiejszy. Test jednostkowy jest również łatwiejszy :)
EDYCJA: na podstawie twoich komentarzy na temat używania wyliczeń i mojej opinii o nieużywaniu null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Powyższe działa dobrze dla mnie. Unikasz null. Jeśli pliki właściwości chcą wyraźnie ustawić, że nie chcą tego obsługiwać, to robisz ( ale nie musisz nawet tego określać, ponieważ domyślnie będzie to NOTSET ).
crap=NOTSET
nulljest bardzo zły i różni się od NOTSET. Oznacza to, że test sprężynowy lub jednostkowy nie ustawił tego, dlatego IMHO jest różnica. Nadal prawdopodobnie użyłbym notacji ustawiającej (poprzedni przykład) jako łatwiejszego do przetestowania jednostkowego (zmienne prywatne są trudne do ustawienia w teście jednostkowym).