Я даю @nosebrain кредит, оскільки я не знав про "нульове значення", але я волію взагалі уникати використання нульових значень, особливо оскільки його важко представити null
у файлі властивостей.
Але ось альтернатива використання null with out, null-value
щоб вона працювала з будь-яким заповнювачем власності.
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;
}
}
Особисто я віддаю перевагу своєму шляху, тому що, можливо, пізніше ви захочете stuff.value
стати значенням, відокремленим комами, або, можливо, переписати перемикання простіше. Його також легше одинично перевірити :)
РЕДАГУВАТИ: на основі ваших коментарів щодо використання перерахувань та моєї думки про невикористання null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Вище сказане для мене добре працює. Ви уникаєте значення null. Якщо ваші файли властивостей хочуть явно встановити, що вони не хочуть обробляти це, тоді ви це робите ( але вам навіть не потрібно вказувати це, оскільки це буде за замовчуванням NOTSET ).
crap=NOTSET
null
дуже погано і відрізняється від NOTSET
. Це означає, що пружинний або одиничний тест не встановив його, тому IMHO має різницю. Я б, напевно, скористався нотацією сеттера (попередній приклад) як простіший модульний тест (приватні змінні важко встановити в модульному тесті).