web-dev-qa-db-ja.com

Java:リターンのないTernary。 (メソッド呼び出しの場合)

何も返さずに3項演算を実行できるかどうか疑問に思っていました。

Javaで不可能な場合は、他の言語でも可能ですか?

name.isChecked() ? name.setChecked(true):name.setChecked(false);
44
TylerKinkade

いいえ、できません。しかし、if-elseステートメントに対するこれのポイントは何ですか?本当に7文字を節約しようとしていますか?

if (name.isChecked()) {
    name.setChecked(true);
} else {
    name.setChecked(false);
}

または悪いスタイルを好む場合:

if (name.isChecked()) name.setChecked(true); else name.setChecked(false);

あなたがただできるという事実を気にしないでください(この場合):

name.setChecked(name.isChecked());

三項演算子または「条件付き」演算子のポイントは、条件をexpressionに導入することです。言い換えれば、これ:

int max = a > b ? a : b;

これを簡略化するためのものです:

int max;
if ( a > b ) {
    max = a;
} else {
    max = b;
}

生成される値がない場合、条件演算子はショートカットではありません。

50
Mark Peters

何も返さずに3項演算を実行できるかどうか疑問に思っていました。

いいえ、不可能です。

  1. 第2および第3オペランドは非void式である必要があります。つまり、実際の値を生成する必要があります。

    "2番目または3番目のオペランド式のいずれかがvoidメソッドの呼び出しである場合、コンパイル時エラーです。"- JLS 15.25

  2. 三項式は式であり、ステートメントとして使用することはできません。

    "特定の種類の式の後にセミコロンを付けることで、ステートメントとして使用できます。"... JLS 14.8

本当に、本当に3項式を使用したいが式の値を使用したくない場合、最も簡単なのは、値をダミー変数に割り当て、使用されていない変数に関する警告を抑制する注釈を追加することです。

しかし、より良いアイデアは、単純なifステートメントを使用することです。

Javaで不可能な場合は、他の言語でも可能ですか?

私は少し錆びていますが、C、C++、およびPerlはすべて、値が使用されていない場所で任意の式を使用できると考えています。

12
Stephen C

時々、リクエストを解決するためにメソッド引数で三項演算を使用できます。

name.setChecked(name.isChecked() ? true : false);

ところで、あなたの問題に対する最善の解決策は

name.setChecked(name:isChecked());
5
Amir Pashazadeh

In Java次のコードは使用できません:

(your-condition) ? (true-statements) : (false-statements)

サンプルでは、​​次のsnipetコードをコンパイルできません。

(1==1) ? System.out.println("") : System.out.println("");

次のコンパイルエラーが発生します。

The left-hand side of an assignment must be a variable
0
Sam

値を返さなければならず、値を返さずに何らかのアクションを実行するvoidメソッドのように動作させたい場合は機能しません。

お役に立てれば...

0
Android