studio programacion para móviles libro edición desarrollo desarrollar curso aprende aplicaciones java inline ternary

java - para - manual de programacion android pdf



Java-Marque No Nulo/Vaciar si no asignar valor predeterminado (5)

Estoy tratando de simplificar el siguiente código.

Los pasos básicos que debe realizar el código son los siguientes:

  1. Asignar a la cadena un valor predeterminado
  2. Ejecutar un método
  3. Si el método devuelve una cadena nula / vacía, deje la cadena como predeterminada
  4. Si el método devuelve una cadena válida, establezca la cadena a este resultado

Un ejemplo simple sería:

String temp = System.getProperty("XYZ"); String result = "default"; if(temp != null && !temp.isEmpty()){ result = temp; }

He hecho otro intento utilizando un operador ternario:

String temp; String result = isNotNullOrEmpty(temp = System.getProperty("XYZ")) ? temp : "default";

El método isNotNullOrEmpty ()

private static boolean isNotNullOrEmpty(String str){ return (str != null && !str.isEmpty()); }

¿Es posible hacer todo esto en línea? Sé que podría hacer algo como esto:

String result = isNotNullOrEmpty(System.getProperty("XYZ")) ? System.getProperty("XYZ") : "default";

Pero estoy llamando el mismo método dos veces. Sería algo así como hacer algo como esto (que no funciona):

String result = isNotNullOrEmpty(String temp = System.getProperty("XYZ")) ? temp : "default";

Me gustaría inicializar la cadena ''temp'' dentro de la misma línea. es posible? ¿O qué debería estar haciendo?

Gracias por tus sugerencias.

Tim


Parece que probablemente quieras un método simple como este:

public String getValueOrDefault(String value, String defaultValue) { return isNotNullOrEmpty(value) ? value : defaultValue; }

Entonces:

String result = getValueOrDefault(System.getProperty("XYZ"), "default");

En este punto, no necesita la temp ... ha utilizado efectivamente el parámetro del método como una forma de inicializar la variable temporal.

Si realmente desea la temp y no desea un método adicional, puede hacerlo en una declaración, pero realmente no lo haría:

public class Test { public static void main(String[] args) { String temp, result = isNotNullOrEmpty(temp = System.getProperty("XYZ")) ? temp : "default"; System.out.println("result: " + result); System.out.println("temp: " + temp); } private static boolean isNotNullOrEmpty(String str) { return str != null && !str.isEmpty(); } }


Puede usar este método en la clase ObjectUtils de la biblioteca org.apache.commons.lang3 :

public static <T> T defaultIfNull(T object, T defaultValue)


Sé que la pregunta es muy antigua, pero con los genéricos se puede agregar un método más generalizado que funcione para todos los tipos.

public static <T> T getValueOrDefault(T value, T defaultValue) { return value == null ? defaultValue : value; }


Use Java 8 Optional (no se necesita filtro):

public static String orElse(String defaultValue) { return Optional.ofNullable(System.getProperty("property")).orElse(defaultValue); }


Utilice org.apache.commons.lang3.StringUtils

String emptyString = new String(); result = StringUtils.defaultIfEmpty(emptyString, "default"); System.out.println(result); String nullString = null; result = StringUtils.defaultIfEmpty(nullString, "default"); System.out.println(result);

Las dos opciones anteriores se imprimirán:

defecto

defecto