c# - sirven - palabras reservadas en java y su significado
¿hay un equivalente de Java para el operador coalescente nulo(??) en C#? (6)
Esta pregunta ya tiene una respuesta aquí:
- ¿Cómo obtener el primer valor no nulo en Java? 12 respuestas
Posible duplicado:
¿Cómo obtener el primer valor no nulo en Java?
¿Es posible hacer algo similar al siguiente código en Java?
int y = x ?? -1;
Los primitivos en Java nunca pueden ser nulos, por lo que esa afirmación no tiene sentido conceptualmente. Sin embargo, las clases contenedoras (Integer, Character, etc.), así como cualquier otra clase instanciable pueden ser nulas.
Además de ese hecho, no hay ninguna sintaxis de mano corta para un operador coalescente nulo. Debe usar la forma expandida.
No, y tenga en cuenta que las funciones de solución no son exactamente las mismas, un verdadero operador coalescente nulo tiene cortocircuitos como && y || do, lo que significa que solo intentará evaluar la segunda expresión si la primera es nula.
Respuesta corta: no
Lo mejor que puede hacer es crear un método de utilidad estático (para que pueda ser importado usando import static
sintaxis import static
)
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 eso 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;
}
Tristemente no. Lo más cerca que puedes hacer es:
int y = (x != null) ? x : -1;
Por supuesto, puede resumir esto en los métodos de la biblioteca si siente la necesidad (es poco probable que reduzca mucho la longitud), pero a nivel de sintaxis no hay nada más breve disponible.
ObjectUtils.firstNonNull(T...)
, de Apache Commons Lang 3 es otra opción. Prefiero esto porque a diferencia de Guava, este método no arroja una Exception
. Simplemente devolverá null
;
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 llamar dos veces al método potencialmente costoso o declarar una variable local en su código para hacer referencia dos veces.