Je donne du crédit à @nosebrain car je ne connaissais pas la "valeur nulle", mais je préfère éviter d'utiliser des valeurs nulles, d'autant plus que c'est difficile à représenter null
dans un fichier de propriétés.
Mais voici une alternative utilisant null sans null-value
pour cela fonctionnera avec n'importe quel espace réservé de propriété.
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;
}
}
Personnellement, je préfère mon chemin parce que peut-être plus tard vous voudrez stuff.value
être une valeur séparée par des virgules ou peut-être enum, le commutateur est plus facile. C'est aussi plus facile à tester unitaire :)
EDIT: basé sur vos commentaires sur l'utilisation des énumérations et mon opinion de ne pas utiliser null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Ce qui précède fonctionne très bien pour moi. Vous évitez null. Si vos fichiers de propriétés veulent définir explicitement qu'ils ne veulent pas le gérer, vous le faites ( mais vous n'avez même pas à le spécifier car il sera par défaut NOTSET ).
crap=NOTSET
null
est très mauvais et est différent de NOTSET
. Cela signifie que le test de ressort ou d'unité ne l'a pas réglé, c'est pourquoi il y a une différence à mon humble avis. J'utiliserais probablement toujours la notation de setter (exemple précédent) car son test unitaire est plus facile (les variables privées sont difficiles à définir dans un test unitaire).