2015-07-14 12 views
13

Ich versuche, den folgenden Code zu vereinfachen. Java - Check Not Null/Empty else Standardwert

  • Führen Sie eine Methode
    1. zuordnen String ein
    2. Standardwert Wenn die Methode eine Null/leeren String zurück verlassen den String als:

      Die grundlegenden Schritte, dass der Code sind durchführen soll wie folgt Standard

    3. Wenn die Methode eine gültige Zeichenfolge zurückgibt, würde die Zeichenfolge zu diesem Ergebnis eingestellt

    ein einfaches Beispiel sein:

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

    ich einen anderen attemp mit einem ternären Operator gemacht haben:

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

    Ist es möglich, dies alles in-line zu tun? Ich weiß, ich könnte so etwas tun:

    Aber ich rufe die gleiche Methode zweimal. Ich wäre so etwas wie etwas zu tun (was nicht funktioniert):

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

    Ich mag würde die ‚Temp‘ String innerhalb der gleichen Zeile initialisieren. Ist das möglich? Oder was soll ich tun?

    Vielen Dank für Ihre Vorschläge.

    Tim

  • +0

    Ist Groovy eine Option? – chrylis

    Antwort

    4

    Ich weiß, die Frage ist wirklich alt, aber mit Generika kann man eine weitere hinzufügen verallgemeinerte Methode mit wird für alle Typen funktionieren.

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

    Danke shibashis. Ich benutze immer noch diesen Code und habe eine Methode für viele Objekttypen! Ich werde stattdessen mit Generika versuchen, um den Code zu vereinfachen. Danke – Cam1989

    +1

    @ Cam1989: Dies beantwortet nicht die Frage, die Sie gefragt haben, denn es behandelt nicht leere Zeichenfolgen ... es behandelt nur den Wert, der 'null' ist, nicht leer ... wenn das ist, was Sie wollten, Das hättest du fragen sollen. Dies ist eine vollkommen gute Lösung für ein anderes Problem, aber es ist * eine Lösung für ein anderes Problem ... –

    +0

    es würde die leere Anforderung erfüllen, indem "Wert == null" durch "isNotNullOrEmpty (Wert)" und Schaltwert ersetzt wird und defaultValue in den ternären Antworten –

    10

    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 dieser Stelle, die Sie nicht Notwendigkeittemp .. Sie haben den Parameter method effektiv dazu verwendet, die temporäre Variable zu initialisieren.

    Wenn Sie wirklichtemp wollen und Sie nicht eine zusätzliche Methode möchten, können Sie können tun es in einer Erklärung, 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(); 
        } 
    } 
    
    +0

    Netter Trick hier :) – hagrawal

    +0

    @fge Sagen wir, es ist nicht der Fall von System.getProperty(), aber eine Methode, die nicht diesen zusätzlichen Parameter für den Standardwert hat. Dann wird der Trick funktionieren, er ist skalierbar. – hagrawal

    +0

    Wie habe ich das so kompliziert gemacht !? Vielen Dank! Ich habe die Methode getValueOrDefault() verwendet. Gute Antwort. – Cam1989

    14

    Verwenden Java 8 Optional:

    String getValueOrDefault(String defaultValue) { 
        return Optional.ofNullable(System.getProperty("property")) 
         .filter(s -> s != null && !s.isEmpty()).orElse(defaultValue); 
    } 
    
    +0

    Danke! Sieht gut aus für zukünftige Referenz, aber die Software/API, die ich verwende, unterstützt derzeit nur Java 7! – Cam1989

    +6

    WOW! Verglichen mit swift's s = q ?? r'. – Q8i

    8

    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 drucken:

    Standard

    Standard