1. ホーム
  2. java

[解決済み] 返された値がNULLでないことを確認し、NULLであればそれを代入する。

2023-04-18 16:24:08

質問

Javaには、次のような記述が散見されます。

if(cage.getChicken() != null) {
    dinner = cage.getChicken();
} else {
    dinner = getFreeRangeChicken();
}

という2つの呼び出しを必要とします。 getChicken() に割り当てられる前に dinner .

これも、次のように1行で書くことができます。

dinner = cage.getChicken() != null? cage.getChicken() : getFreeRangeChicken();

しかし、残念ながら、まだ getChicken() .

もちろん、ローカル変数を代入して、それがNULLでなければもう一度三項演算子を使って代入することもできますが、これでは2行になり、あまりきれいではありません。

FutureMeal chicken = cage.getChicken();
dinner = chicken != null? chicken : getFreeRangeChicken();

ということは、何か方法があるのでしょうか。

変数 var = ある値 if ある値が null でない or ある他の の値でなければなりません。

そして、私はここで構文について話しているだけで、コードがコンパイルされた後、おそらくパフォーマンスの意味でコードがどのように書かれたかに大きな違いはないのだと思います。

これは一般的なコードなので、それを書くためのワンライナーがあれば最高です。

他の言語にはこの機能はないのでしょうか?

どのように解決するのですか?

Javaにはcoalesce演算子がないため、明示的なtemporaryを使用したコードは、1回の呼び出しで代入できる最適な方法です。

このように、結果変数をテンポラリとして使用することができます。

dinner = ((dinner = cage.getChicken()) != null) ? dinner : getFreeRangeChicken();

しかし、これでは読みにくい。