traduccion spanish juice fruta examples español java guava

java - spanish - guava maven



¿Cómo convertir un valor nulo posible a un valor predeterminado utilizando guava? (9)

¿Guava proporciona un método para obtener un valor predeterminado si una referencia de objeto pasada es null ? Estoy buscando algo como <T> T nullToDefault(T obj, T default) , donde se devuelve el valor predeterminado si obj es null .

Aquí en stackoverflow no encontré nada al respecto. ¡Sólo estoy buscando una solución de guayaba pura (si hay alguna)!

No encontré nada en la API de Gauva 10, solo com.google.common.base.Objects parece prometedor pero carece de algo similar.


Además de Objects.firstNonNull , Guava 10.0 agregó la clase Optional como una solución más general para este tipo de problema.

Un Optional es algo que puede o no contener un valor. Hay varias formas de crear una instancia Optional , pero para su caso, el método de fábrica Optional.fromNullable(T) es apropiado.

Una vez que tenga un Optional , puede usar uno de los métodos or para obtener el valor que contiene el Optional (si contiene un valor) o algún otro valor (si no lo tiene).

Poniéndolo todo junto, su simple ejemplo se vería así:

T value = Optional.fromNullable(obj).or(defaultValue);

La flexibilidad adicional de Optional viene si desea usar un Supplier para el valor predeterminado (por lo que no hace el cálculo para obtenerlo a menos que sea necesario) o si desea encadenar varios valores opcionales para obtener el primer valor que es presente, por ejemplo:

T value = someOptional.or(someOtherOptional).or(someDefault);


Como se dijo anteriormente, la solución de guayaba es correcta.

Sin embargo, hay una solución JDK pura con Java 8 :

Optional.ofNullable( var ).orElse( defaultValue );

Ver documentación de java.util.Optional


Considere usar el Optional integrado en Guava 10. Puede encadenar múltiples opcionales, como Optional.fromNullable(var).orNull() o Optional.fromNullable(var).or(Optional.of(var2)).orNull()


Esto debería hacer el truco: Objects.firstNonNull(o, default)
Ver guava API doc.


Los objetos opcionales de java.util.Objects y Guava proporcionan una buena forma de obtener valores nulos a valores predeterminados ... los he estado usando mucho

Pero aquí hay algo para una mentalidad más imperativa:

public static <T> T firstNotNuLL(T...args){ for (T arg : args) if ( arg != null) return arg; throw new NullPointerException(); }


Qué tal si

MoreObjects.firstNonNull(obj, default)

Ver el JavaDoc .

(Nota histórica: la clase MoreObjects solía llamarse Objects , pero se le cambió el nombre para evitar confusiones con la clase java.util.Objects introducida en Java 7. La clase Objects Guava ahora está en desuso).


Si solo está hablando de cadenas, también hay métodos predeterminados de la cadena predeterminada de Apache Commons y métodos predeterminados de vacíos.

defaultString solo le dará el valor predeterminado en un nulo verdadero, mientras que defaultIfEmpty le dará el valor predeterminado en un nulo o una cadena vacía.

También hay defaultIfBlank que le dará el valor predeterminado incluso en una cadena en blanco.

p.ej

String description = ""; description = StringUtils.defaultIfBlank(description, "Theodore");

la descripción ahora será igual a "Theodore"

Edición: Apache Commons también tiene una clase ObjectUtils que no tiene valores predeterminados nulos para objetos completamente horneados ...


Si su objeto no es ya opcional, las sugerencias Opcionales / firstNotNull complican lo que es una característica simple de Java, el operador ternario:

T myVal = (val != null) ? val : defaultVal;

La inclusión de una dependencia y las llamadas a múltiples métodos introducen tanta complejidad de lectura como el operador ternario. Incluso diría que usar la Optional opuesta a su método ''mi método puede o no devolver un objeto'' es una señal de alerta de que estás haciendo algo mal (como en otros casos donde uno abusa de algo contrario al significado semántico de esa cosa) .

Consulte http://alvinalexander.com/java/edu/pj/pj010018 para obtener más información sobre el operador ternario.


Solo para tu información, Java 9 tiene dos métodos que hacen exactamente lo que quieres:

public static <T> T requireNonNullElse(T obj, T defaultObj);

Y una versión perezosa:

public static <T> T requireNonNullElseGet(T obj, Supplier<? extends T> supplier)