¿Existe un equivalente en Java al operador coalescente nulo (??) en C#? [duplicar]
¿Es posible hacer algo similar al siguiente código en Java?
int y = x ?? -1;
Más sobre??
Tristemente no. Lo más cercano que puedes hacer es:
int y = (x != null) ? x : -1;
Por supuesto, puede resumir esto en métodos de biblioteca si lo considera necesario (es poco probable que reduzca mucho la longitud), pero a nivel de sintaxis no hay nada más conciso disponible.
La biblioteca Guava tiene un método que hace algo similar llamado MoreObjects.firstNonNull(T,T) .
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
Esto es más útil cuando tienes algo como
int y = firstNonNull(calculateNullableValue(), -1);
ya que le evita tener que llamar dos veces al método potencialmente costoso o declarar una variable local en su código para hacer referencia dos veces.
Respuesta corta: no
Lo mejor que puedes hacer es crear un método de utilidad estático (para que pueda importarse usando import static
la sintaxis)
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
Lo anterior es equivalente al método de Guava firstNonNull
de @ColinD, pero se puede extender más en general.
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
ObjectUtils.firstNonNull(T...)
de Apache Commons Lang 3 es otra opción. Prefiero esto porque, a diferencia de Guava, este método no arroja un archivo Exception
. Simplemente regresará null
.