2

重複の可能性:
Javaでnull以外の最初の値を取得する方法は?

私は次の操作をしています

function1(function2(param1,param2));

function2 が返さnullれた場合は、ゼロに置き換えてください。これにはいくつかの方法がありますが、これに対するショートカット表記はありますか? たとえば、これに沿ったものはありますか

function1(function2(param1,param2)==null || "0")

: 関数 2 は文字列を返します。

4

4 に答える 4

4

Guavaに切り替える前に、作業中のすべてのプロジェクトに対して以下の関数を書いていることに気付きました。おそらく、どこかのライブラリにすでに実装されています。

<T> public static T coalesce(T... elements){
    for(T element : elements) {
        if (element != null) return element;
    }
    throw new NoSuchElementException();
}

// Usage:

function1(coalesce(function2(param1,param2), "default value"));

コードの重複がなく、一時変数を導入するか、同じ呼び出しを 2 回実行するかを選択する必要がないため (以前に提案された条件演算子のように)、これは素晴らしいことです。あまり流暢に読めないので、良くありません。

Guava を使用している場合 (使用する必要があります)、 を使用Optionalして回避nullできます。これには、API をより明確にし、s が発生しにくくなるという利点もありますNullPointerException

void function1(String arg) {}
Optional<String> function2(){ /* insert code*/ }

// Usage:
function1(function2().or("default value"));
于 2012-09-26T21:24:16.143 に答える
3

確かに、ほぼ正確にそれを行う三項演算子があります。

<expression> ? <value if expression is true> : <value if expression is false>

それで、

String result = function2(param1,param2);
function1(result != null ? result : "0");

あなたが望むことをするでしょう。

于 2012-09-26T20:59:43.630 に答える
1

どうですか

function1(function2(param1,param2) != null? function2(param1, param2): 0);

ところで、function2 が 2 回呼び出されるため、データに永続的な変更を加えない場合にのみ、これを使用できます。そうすると、2 回目に別の答えが得られる可能性があります。

于 2012-09-26T21:00:17.567 に答える
0

?代入で式条件を使用する

Integer value = function1((value=function2(param1,param2)) != null? value: 0);
于 2012-09-26T21:25:25.867 に答える