Nik*_*tov 159 c# java null-coalescing-operator equivalent
可能重复:
如何获取Java中的第一个非null值?
是否可以在Java中执行类似于以下代码的操作
int y = x ?? -1;
Run Code Online (Sandbox Code Playgroud)
And*_*yle 115
可悲的是没有.你最接近的是:
int y = (x != null) ? x : -1;
Run Code Online (Sandbox Code Playgroud)
当然,如果您觉得有必要(可能不会减少很多长度),您可以将它包装在库方法中,但在语法级别上没有更简洁的可用.
Col*_*inD 49
Guava有一个类似于MoreObjects.firstNonNull(T,T)的方法.
Integer x = ...
int y = MoreObjects.firstNonNull(x, -1);
Run Code Online (Sandbox Code Playgroud)
当你有类似的东西时,这会更有帮助
int y = firstNonNull(calculateNullableValue(), -1);
Run Code Online (Sandbox Code Playgroud)
因为它可以避免两次调用潜在的昂贵方法或者在代码中声明一个局部变量来引用两次.
usr*_*ΛΩΝ 36
简答:不
您可以做的最好的事情是创建一个静态实用程序方法(以便可以使用import static
语法导入它)
public static <T> T coalesce(T one, T two)
{
return one != null ? one : two;
}
Run Code Online (Sandbox Code Playgroud)
上面的内容相当于firstNonNull
@ColinD的Guava方法,但总的来说可以扩展得更多
public static <T> T coalesce(T... params)
{
for (T param : params)
if (param != null)
return param;
return null;
}
Run Code Online (Sandbox Code Playgroud)
ObjectUtils.firstNonNull(T...)
,来自Apache Commons Lang 3的另一种选择。与Guava不同,我更喜欢这种方式,这种方法不会抛出Exception
。它只会返回null
;