¿Existe un equivalente en Java al operador coalescente nulo (??) en C#? [duplicar]

Resuelto Nikita Ignatov asked hace 13 años • 5 respuestas

¿Es posible hacer algo similar al siguiente código en Java?

int y = x ?? -1;

Más sobre??

Nikita Ignatov avatar Mar 08 '11 00:03 Nikita Ignatov
Aceptado

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.

Andrzej Doyle avatar Mar 07 '2011 17:03 Andrzej Doyle

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.

ColinD avatar Mar 07 '2011 17:03 ColinD

Respuesta corta: no

Lo mejor que puedes hacer es crear un método de utilidad estático (para que pueda importarse usando import staticla sintaxis)

public static <T> T coalesce(T one, T two)
{
    return one != null ? one : two;
}

Lo anterior es equivalente al método de Guava firstNonNullde @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;
}
usr-local-ΕΨΗΕΛΩΝ avatar Jul 23 '2015 12:07 usr-local-ΕΨΗΕΛΩΝ

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.

mateuscb avatar Aug 26 '2015 22:08 mateuscb