J'essaye de simplifier le code suivant.
Les étapes de base que le code doit effectuer sont les suivantes:
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
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;
}
Utilisez Java 8 Optional
(aucun filtre requis):
public static String orElse(String defaultValue) {
return Optional.ofNullable(System.getProperty("property")).orElse(defaultValue);
}
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
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();
}
}
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)