在C#中有一个Java等价于null合并运算符(??)吗?

可能重复:
如何获得Java中的第一个非空值?

是否有可能做类似于下面的Java代码:

int y = x ?? -1; 

更多关于 ??

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

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

当然,如果你觉得需要(不太可能减less长度),你可以用库方法来包装它,但是在语法层面上,没有更简洁的可用。

番石榴有一个方法,做一些类似的叫做MoreObjects.firstNonNull(T,T) 。

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

当你有类似的东西时,这会更有帮助

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

因为它可以避免两次调用潜在的昂贵的方法,或者在代码中声明局部variables来引用两次。

简短的回答:

你所能做的最好的是创build一个静态工具方法(这样它可以使用import static语法import static

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

以上相当于firstNonNull的番石榴的方法firstNonNull,但一般可以扩展更多

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

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

ObjectUtils.firstNonNull(T...) ,来自Apache Commons Lang 3是另一种select。 我更喜欢这个不像Guava,因为这个方法不会抛出Exception 。 它会简单地返回null ;

Java中的基元永远不能为空,所以这个语句在概念上是没有意义的。 但是,包装类(Integer,Character等)以及任何其他可实例化的类都可以为null。

除此之外,空合并运算符没有任何简短的语法。 您必须使用展开的表单。