web-dev-qa-db-ger.com

Java - Check Not NULL/Empty, sonst Standardwert zuweisen

Ich versuche den folgenden Code zu vereinfachen.

Die grundlegenden Schritte, die der Code ausführen soll, lauten wie folgt:

  1. Weisen Sie String einen Standardwert zu 
  2. Führen Sie eine Methode aus 
  3. Wenn die Methode eine leere/leere Zeichenfolge zurückgibt, belassen Sie die Zeichenfolge als Standard 
  4. Wenn die Methode einen gültigen String zurückgibt, setzen Sie den String auf dieses Ergebnis

Ein einfaches Beispiel wäre:

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

Ich habe einen anderen Versuch mit einem ternären Operator durchgeführt:

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

Die isNotNullOrEmpty () - Methode

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

Kann man das alles inline machen? Ich weiß, ich könnte so etwas tun:

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

Aber ich rufe dieselbe Methode zweimal auf. Ich würde so etwas gerne machen (was nicht funktioniert):

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

Ich möchte den 'temp' String innerhalb derselben Zeile initialisieren. Ist das möglich? Oder was soll ich tun?

Vielen Dank für Ihre Vorschläge.

Tim

25
Cam1989

Ich weiß, dass die Frage wirklich alt ist, aber mit Generika kann man eine allgemeinere Methode hinzufügen, die für alle Typen geeignet ist.

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

Verwenden Sie Java 8 Optional (kein Filter erforderlich):

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

Verwenden Sie 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);

Beide oben genannten Optionen werden gedruckt:

default

default

19
zalis

Klingt wie Sie wahrscheinlich eine einfache Methode wie diese wollen:

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

Dann:

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

An diesem Punkt brauchen Sie nicht need temp... Sie haben den Methodenparameter effektiv als Mittel zur Initialisierung der temporären Variablen verwendet.

Wenn Sie wirklich temp wollen und keine zusätzliche Methode möchten, können Sie es in einer Anweisung tun, aber ich würde wirklich nicht:

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();
    }
}
11
Jon Skeet

Sie können diese Methode in der ObjectUtils-Klasse von org.Apache.commons.lang3 library verwenden:

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