5

非常に基本的な質問だと思いますが、このコードがどのように読み取られるか知りたかっただけです:

return someboolean ? new someinstanceofsomething() : someotherboolean ? new otherinstance() : new third instance(); 

今書いていると、その言葉の意味がなんとなくわかる気がします。true の場合はオプション 1 を返しますが、false の場合は別のブール値チェックを行い、残りの 2 つのオプションのいずれかを返しますか? 私はこれまでに見たことがなく、他の人も見たことがないので、この質問を続けます。

三項演算の中で三項を無期限に続けることができますか?

編集:また、なぜこれ/これは、一連のifステートメントを使用するよりもコードに適していないのですか?

4

2 に答える 2

16

JLS #15.25で定義されています。

条件演算子は構文的に右結合です (右から左にグループ化されます)。したがって、a?b:c?d:e?f:gは と同じ意味a?b:(c?d:(e?f:g))です。

あなたの場合、

return someboolean ? new someinstanceofsomething() : someotherboolean ? new otherinstance() : new third instance();

次と同等です。

return someboolean ? new someinstanceofsomething() : (someotherboolean ? new otherinstance() : new third instance());
于 2013-08-09T12:33:24.520 に答える
6

三項演算子は右結合です。JLS リファレンスについてはassyliasの回答を参照してください。

あなたの例は次のように変換されます。

if (someboolean) {
  return new someinstanceofsomething();
} else {
  if (someotherboolean) {
    return new otherinstance();
  } else {
    return new thirdinstance()
  }
}

はい、これらを無期限にネストできます。

于 2013-08-09T12:33:45.040 に答える