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 null
w pliku właściwości.
Ale tutaj jest alternatywa używania null bez out, null-value
wię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.value
być 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
null
jest 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).