以下を含む Java コードを見ています。
User rv = tmp != null && tmp.size() > 0 ? tmp.get(0) : null;
私は Java 構文があまり得意ではありません。私の解釈は、 is が is である限り、rv = tmp
そうでなければ等しいということです。私は正しいですか?tmp
null
tmp
size
> 0
null
この式の「構造」は次のとおりです。
rv = // assignment of a conditional expression
(tmp != null && tmp.size() > 0) // condition
? tmp.get(0) // on true
: null; // on false
これは、リストの要素 0 にアクセスする例外がないことを保証する一般的な方法です。条件は、 でtmp
はないことnull
、およびサイズが 1 以上であることを保証します。
これは三項条件式です:
expr ? value-if-true : value-if-false
expr
が true の場合は に評価されvalue-if-true
、そうでない場合は に評価されvalue-if-valuse
ます。
したがって、この場合、次と同等です。
if (tmp != null && tmp.size() > 0) {
rv = tmp.get(0);
} else {
rv = null;
}
rv = ((tmp != null && tmp.size() > 0) ? tmp.get(0) : null);
内側の括弧内の式が true を返す場合、rv は値 tmp.get(0) を保持します。それ以外の場合は、値 null を保持します。
variable = expression ? a : b ;
と類似しています
if expression == true
variable = a;
else
variable =b ;