web-dev-qa-db-fra.com

Java - Vérifier les valeurs non nulles/vides sinon attribuer une valeur par défaut

J'essaye de simplifier le code suivant.

Les étapes de base que le code doit effectuer sont les suivantes:

  1. Attribuer une valeur par défaut à String 
  2. Exécuter une méthode 
  3. Si la méthode retourne une chaîne nulle/vide, laissez la chaîne par défaut 
  4. Si la méthode retourne une chaîne valide, définissez la chaîne sur ce résultat.

Un exemple simple serait:

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

J'ai fait un autre essai avec un opérateur ternaire:

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

La méthode isNotNullOrEmpty ()

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

Est-il possible de faire tout cela en ligne? Je sais que je pourrais faire quelque chose comme ça:

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

Mais j'appelle deux fois la même méthode. Je voudrais faire quelque chose comme ça (qui ne marche pas):

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

Je voudrais initialiser la chaîne 'temp' dans la même ligne. Est-ce possible? Ou que devrais-je faire?

Merci pour vos suggestions.

Tim

25
Cam1989

Je sais que la question est vraiment ancienne, mais avec les génériques, on peut ajouter une méthode plus généralisée qui fonctionnera pour tous les types.

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

Utilisez Java 8 Optional (aucun filtre requis):

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

Utilisez 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);

Les deux options ci-dessus seront imprimées:

default

default

19
zalis

On dirait que vous voulez probablement une méthode simple comme celle-ci:

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

Ensuite:

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

À ce stade, vous n'avez pas besoin detemp... vous avez effectivement utilisé le paramètre de méthode comme moyen d'initialiser la variable temporaire.

Si vous vraiment voulez temp et que vous ne voulez pas de méthode supplémentaire, vous pouvez le faire en une seule déclaration, mais je ne voudrais vraiment pas:

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

Vous pouvez utiliser cette méthode dans la classe ObjectUtils à partir de org.Apache.commons.lang3 library:

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