悲しいことに-いいえ。最も近い方法は次のとおりです。
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回参照したりする必要がないためです。
短い答え:no
できる最善の方法は、静的ユーティリティメソッドを作成することです(import static
構文を使用してインポートできるように)
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
上記は@ColinDによるGuavaのメソッドfirstNonNull
と同等ですが、より一般的には拡張可能です
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
いいえ、回避策関数はまったく同じではないことに注意してください。&&や||のような真のヌル合体演算子短絡です。つまり、最初の式がnullの場合にのみ2番目の式を評価しようとします。
ObjectUtils.firstNonNull(T...)
、Apache Commons Lang 3の別のオプションです。 Guavaとは異なり、この方法が好きです。このメソッドはException
をスローしません。単にnull
を返します。
Javaのプリミティブがnullになることはないため、このステートメントは概念的に意味をなしません。ただし、ラッパークラス(整数、文字など)、およびその他のインスタンス化可能なクラスはnullにすることができます。
その事実に加えて、null合体演算子の短縮構文はありません。拡張フォームを使用する必要があります。