web-dev-qa-db-ja.com

Java-Not Null / Emptyをチェックするか、デフォルト値を割り当てる

次のコードを簡素化しようとしています。

コードで実行する基本的な手順は次のとおりです。

  1. 文字列にデフォルト値を割り当てる
  2. メソッドを実行する
  3. メソッドがnull /空の文字列を返す場合、デフォルトのままにしてください
  4. メソッドが有効な文字列を返す場合、この結果に文字列を設定します

簡単な例は次のとおりです。

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

三項演算子を使用して別の試みをしました:

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

IsNotNullOrEmpty()メソッド

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

このすべてをインラインで行うことは可能ですか?私は次のようなことができることを知っています:

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

ただし、同じメソッドを2回呼び出しています。私はこのようなことをしたいのですが(うまくいきません):

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

同じ行内で 'temp'文字列を初期化したい。これは可能ですか?または私は何をすべきですか?

ご提案ありがとうございます。

ティム

33
Cam1989

私は質問が本当に古いことを知っていますが、ジェネリックを使用すると、より一般化されたメソッドを追加して、すべてのタイプで機能します。

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

Java 8 Optional (フィルター不要)を使用:

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

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

上記のオプションの両方が印刷されます:

default

default

27
zalis

おそらく次のような簡単な方法が必要なようです。

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

次に:

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

この時点では、必要temp...ではありません。一時変数を初期化する方法としてメソッドパラメーターを効果的に使用しました。

実際にtempを必要とし、追加のメソッドが必要ない場合は、canを1つのステートメントで実行しますが、実際にはそうしません。

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

org.Apache.commons.lang libraryのObjectUtilsクラスでこのメソッドを使用できます:

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