开发者

is there a Java equivalent to null coalescing operator (??) in C#? [duplicate]

This question already has answers here: How to get the first non-null value in Java? (13 answers) Closed 5 years ago.

The community reviewed whether to reopen this question last year and left it closed:

开发者_StackOverflow中文版

Original close reason(s) were not resolved

Is it possible to do something similar to the following code in Java

int y = x ?? -1;

More about ??


Sadly - no. The closest you can do is:

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

Of course, you can wrap this up in library methods if you feel the need to (it's unlikely to cut down on length much), but at the syntax level there isn't anything more succinct available.


Guava has a method that does something similar called MoreObjects.firstNonNull(T,T).

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

This is more helpful when you have something like

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

since it saves you from either calling the potentially expensive method twice or declaring a local variable in your code to reference twice.


Short answer: no

The best you can do is to create a static utility method (so that it can be imported using import static syntax)

public static <T> T coalesce(T one, T two)
{
    return one != null ? one : two;
}

The above is equivalent to Guava's method firstNonNull by @ColinD, but that can be extended more in general

public static <T> T coalesce(T... params)
{
    for (T param : params)
        if (param != null)
            return param;
    return null;
}


ObjectUtils.firstNonNull(T...), from Apache Commons Lang 3 is another option. I prefer this becuase unlike Guava, this method does not throw an Exception. It will simply return null;


No, and be aware that workaround functions are not exactly the same, a true null coalescing operator short circuits like && and || do, meaning it will only attempt to evaluate the second expression if the first is null.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜