Ich versuche den folgenden Code zu vereinfachen.
Die grundlegenden Schritte, die der Code ausführen soll, lauten wie folgt:
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
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;
}
Verwenden Sie Java 8 Optional
(kein Filter erforderlich):
public static String orElse(String defaultValue) {
return Optional.ofNullable(System.getProperty("property")).orElse(defaultValue);
}
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
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();
}
}
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)