Javaで次のコードのようなことをすることは可能ですか?
int y = x ?? -1;
悲しいことに-いいえ。あなたができる最も近いものは次のとおりです。
int y = (x != null) ? x : -1;
もちろん、必要に応じてこれをライブラリメソッドでラップすることもできますが(長さを大幅に短縮することはほとんどありません)、構文レベルでは、これ以上簡潔なものはありません。
Guavaには、 MoreObjects.firstNonNull(T、T)と呼ばれる同様のことを行うメソッドがあります。
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
これは、次のようなものがある場合に役立ちます
int y = firstNonNull(calculateNullableValue(), -1);
これにより、コストがかかる可能性のあるメソッドを2回呼び出したり、コード内でローカル変数を2回参照するように宣言したりする必要がなくなります。
簡単な答え:いいえ
import static
できる最善の方法は、静的ユーティリティメソッドを作成することです(構文を使用してインポートできるようにするため)。
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
上記はfirstNonNull
@ColinDによるGuavaの方法と同等ですが、より一般的に拡張できます。
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
いいえ。回避策の機能はまったく同じではないことに注意してください。&&や||などの真のヌル合体演算子は短絡します。これは、最初の式がnullの場合にのみ、2番目の式の評価を試みることを意味します。
ObjectUtils.firstNonNull(T...)
、Apache CommonsLang3からは別のオプションです。私はGuavaとは異なり、この方法を好みます。このメソッドは。をスローしませんException
。単に戻りnull
ます;
Javaのプリミティブは決してヌルになることはないので、そのステートメントは概念的に意味がありません。ただし、ラッパークラス(整数、文字など)、およびその他のインスタンス化可能なクラスはnullになる可能性があります。
その事実に加えて、null合体演算子の簡略構文はありません。拡張フォームを使用する必要があります。