是否有Java等效的SQL COALESCE函数?也就是说,有没有办法返回几个变量的第一个非空值?
例如
Double a = null;
Double b = 4.4;
Double c = null;
Run Code Online (Sandbox Code Playgroud)
我想无论如何都将返回的第一个非NULL值的语句a,b以及c-在这种情况下,它会返回b,或4.4.(类似于sql方法 - 返回COALESCE(a,b,c)).我知道我可以用以下方式明确地做到:
return a != null ? a : (b != null ? b : c)
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有任何内置的,可接受的功能来实现这一目标.
我知道当我读到这个答案时,我会发现我忽略了一些在我眼前的东西.但我花了最后30分钟试图弄清楚自己没有结果.
所以,我在Java 6中编写了一个程序,并发现了一些(对我来说)奇怪的功能.为了尝试隔离它,我做了两个小例子.我首先尝试了以下方法:
private static int foo()
{
return null;
}
Run Code Online (Sandbox Code Playgroud)
并且编译器拒绝它:类型不匹配:无法从null转换为int.
这对我很好,它尊重我熟悉的Java语义.然后我尝试了以下内容:
private static Integer foo(int x)
{
if (x < 0)
{
return null;
}
else
{
return new Integer(x);
}
}
private static int bar(int x)
{
Integer y = foo(x);
return y == null ? null : y.intValue();
}
private static void runTest()
{
for (int index = 2; index > -2; index--)
{
System.out.println("bar(" + index + ") = " + bar(index));
}
}
Run Code Online (Sandbox Code Playgroud)
编译没有错误!但是,在我看来,行中应该存在类型转换错误 …