Java 中是否有相当于 C# 中的空合并运算符 (??) 的工具? [重复]

问题描述 投票:0回答:5

是否可以在Java中执行类似于以下代码的操作

int y = x ?? -1;

更多关于

??

java c# equivalent null-coalescing-operator
5个回答
191
投票

可悲的是 - 没有。你能做的最接近的是:

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

当然,如果您觉得有必要,您可以将其包装在库方法中(不太可能减少太多长度),但在语法级别上没有更简洁的可用方法。


68
投票

Guava 库有一个方法可以执行类似的操作,称为 MoreObjects.firstNonNull(T,T)

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

当您遇到类似情况时,这会更有帮助

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

因为它可以让您避免两次调用可能昂贵的方法或在代码中声明一个局部变量来引用两次。


50
投票

简短回答:

您能做的最好的事情就是创建一个静态实用方法(以便可以使用

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;
}

30
投票
来自 Apache Commons Lang 3 的

ObjectUtils.firstNonNull(T...)
是另一种选择。我更喜欢这个,因为与 Guava 不同,这个方法不会抛出
Exception
。它只会返回
null
;


24
投票

不,请注意,解决方法函数并不完全相同,真正的空合并运算符短路,如 && 和 || do,这意味着如果第一个表达式为空,它只会尝试计算第二个表达式。

© www.soinside.com 2019 - 2024. All rights reserved.