web-dev-qa-db-ja.com

三項演算子-JAVA

これを変更することは可能ですか?

if(String!= null) {

    callFunction(parameters);

} else {

    // Intentionally left blank

}

...三項演算子に?

28
Lucas Pugliese

さて、Javaの_ternary operator_はこのように動作します...

_return_value = (true-false condition) ? (if true expression) : (if false expression);
_

...別の見方...

_return_value = (true-false condition) 
             ? (if true expression) 
             : (if false expression);
_

あなたの質問は漠然としていますが、ここで想定しなければなりません。

  • (およびifのみ)callFunction(...)が_non-void_戻り値(ObjectStringintを宣言する場合、doubleなど)-コードを介してそれを行わないようです-その後、これを行うことができます...

    _return_value = (string != null) 
                 ? (callFunction(...)) 
                 : (null);
    _
  • callFunction(...)が値を返さない場合、cannot三項演算子を使用します!そのような単純な。必要のないものを使用します。

    • 問題を解決するために、さらにコードを投稿してください

それにもかかわらず、三項演算子は代替の割り当てのみを表す必要があります!!あなたのコードはそれをしていないようですので、そうするべきではありません。

これは彼らが働くべき方法です...

_if (obj != null) {            // If-else statement

    retVal = obj.getValue();  // One alternative assignment for retVal

} else {

    retVal = "";              // Second alternative assignment for retVale

}
_

これはに変換することができます...

_retVal = (obj != null)
       ? (obj.getValue())
       : ("");
_

あなたはこのコードを1行にリファクタリングしようとしているようですので、以下を追加しました

また、偽句が本当に空の場合、これを行うことができます...

_if (string != null) {

    callFunction(...);

} // Take note that there is not false clause because it isn't needed
_

OR

_if (string != null) callFunction(...);  // One-liner
_
52

はい。 nullブロックに同じelseを保持することができます。

_String result = str !=null ?  callFunction(parameters) : null;
_

callFunction(parameters)Stringを返すことを確認してください。

2
Suresh Atta

三項演算子を使用して、2つのを組み合わせることができますが、空のは式ではありません。

メソッド呼び出しが式として使用できるのは、メソッドが値を返す場合(read:はvoidで宣言されていない)、ダミー定数nullと一緒に使用して三項演算子を形成できますが、結果は、statementが必要な場所では許可されない式になります。つまり、ifステートメントを置き換えることはできません。

式を取り、追加の副作用を課さない別の構成を追加することにより、完全な置換を構成できます。例えば。取得する新しいローカル変数を宣言して割り当てることにより、以下を取得します。

_Object dummy=condition? callFunction(parameters): null;
_

ただし、単にif(condition) callFunction(parameters);と言ってもメリットはありません。戻り値がプリミティブ型の場合、自動ボクシングを実行するため、不要なオーバーヘッドが追加される可能性もあります。

Java 8には、voidメソッドでも機能するパズルの解決策があります。

_((Runnable)(condition? ()->callFunction(parameters): ()->{})).run();
_

しかし、単にifを使用する以上の利点はありません。

2
Holger

メソッドcallFunction()が戻り値型を持っている場合、可能性があります。その後、SURESH ATTAが彼の答えに書いたように、あなたはそれをすることができます:

_String result = str!=null ? callFunction(str) : null;
_

または、結果またはその他の引数に他の型を使用します。 else- statementのメソッドも呼び出したい場合、このメソッドはif- statementのメソッドと同じ戻り値の型を持つ必要があります。

メソッドに戻り型がない場合/ callFunction()の戻り型がvoidである場合、if-_elseを変更することはできません-三項演算子へのステートメント。

1
msrd0