Le doy crédito a @nosebrain porque no sabía sobre "valor nulo", pero prefiero evitar el uso de valores nulos por completo, particularmente porque es difícil de representar null
en un archivo de propiedades.
Pero aquí hay una alternativa que usa null sin, null-value
por lo que funcionará con cualquier marcador de posición de propiedad.
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;
}
}
Personalmente prefiero mi camino porque tal vez más adelante quieras stuff.value
ser un valor separado por comas o tal vez para Enum, el cambio es más fácil. También es más fácil realizar pruebas unitarias :)
EDITAR: basado en sus comentarios sobre el uso de enumeraciones y mi opinión de no usar null.
@Component
public class MyObject {
@Value("${crap:NOTSET}")
private Crap crap;
public enum Crap {
NOTSET,
BLAH;
}
}
Lo anterior funciona bien para mí. Evitas nulo. Si sus archivos de propiedades quieren establecer explícitamente que no quieren manejarlo, entonces lo hace ( pero ni siquiera tiene que especificar esto, ya que estará predeterminado en NOTSET ).
crap=NOTSET
null
es muy malo y es diferente a NOTSET
. Significa que la prueba de resorte o de unidad no lo configuró, por lo que en mi humilde opinión hay una diferencia. Probablemente todavía usaría la notación de establecedor (ejemplo anterior) ya que es más fácil de realizar una prueba unitaria (las variables privadas son difíciles de configurar en una prueba unitaria).