Java 中是否有相当于 C# 中的空合并运算符 (??) 的功能?

发布于 2024-10-20 11:29:25 字数 155 浏览 7 评论 0 原文

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

int y = x ?? -1;

有关 的更多信息?

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

int y = x ?? -1;

More about ??

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

萌能量女王 2024-10-27 11:29:25

可悲的是 - 没有。您可以做的最接近的是:

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

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

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.

我早已燃尽 2024-10-27 11:29:25

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

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

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

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

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

The Guava library 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.

離殇 2024-10-27 11:29:25

简短的回答:

您能做的最好的事情就是创建一个静态实用方法(以便可以使用import static语法导入它)

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

上面相当于Guava的方法< code>firstNonNull by @ColinD,但一般来说可以扩展更多

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

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;
}
辞取 2024-10-27 11:29:25

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

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

深爱成瘾 2024-10-27 11:29:25

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

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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文