210

Javaで次のコードのようなことをすることは可能ですか?

int y = x ?? -1;

詳細について??

4

6 に答える 6

163

悲しいことに-いいえ。あなたができる最も近いものは次のとおりです。

int y = (x != null) ? x : -1;

もちろん、必要に応じてこれをライブラリメソッドでラップすることもできますが(長さを大幅に短縮することはほとんどありません)、構文レベルでは、これ以上簡潔なものはありません。

于 2011-03-07T17:36:55.340 に答える
61

Guavaには、 MoreObjects.firstNonNull(T、T)と呼ばれる同様のことを行うメソッドがあります。

Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);

これは、次のようなものがある場合に役立ちます

int y = firstNonNull(calculateNullableValue(), -1);

これにより、コストがかかる可能性のあるメソッドを2回呼び出したり、コード内でローカル変数を2回参照するように宣言したりする必要がなくなります。

于 2011-03-07T17:50:11.447 に答える
41

簡単な答え:いいえ

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;
}
于 2015-07-23T12:44:28.273 に答える
21

いいえ。回避策の機能はまったく同じではないことに注意してください。&&や||などの真のヌル合体演算子は短絡します。これは、最初の式がnullの場合にのみ、2番目の式の評価を試みることを意味します。

于 2015-09-16T18:06:06.390 に答える
16

ObjectUtils.firstNonNull(T...)、Apache CommonsLang3からは別のオプションです。私はGuavaとは異なり、この方法を好みます。このメソッドは。をスローしませんException。単に戻りnullます;

于 2015-08-26T22:45:08.457 に答える
0

Javaのプリミティブは決してヌルになることはないので、そのステートメントは概念的に意味がありません。ただし、ラッパークラス(整数、文字など)、およびその他のインスタンス化可能なクラスはnullになる可能性があります。

その事実に加えて、null合体演算子の簡略構文はありません。拡張フォームを使用する必要があります。

于 2011-03-07T17:38:40.087 に答える