Java可变参数可以为空吗?

28

我发现自己在检查这个并询问它是否必要。我的代码如下:

public Object myMethod(Object... many) {
  if (many == null || many.length == 0)
    return this;
  for (Object one : many)
    doSomethingWith(one);
  return that;
}

但是我在想... 我是不是太谨慎了?我必须检查many == null吗?在任何当前的Java版本中这可能发生吗?如果是,怎么办?如果不是,我可能会继续检查,只是为了防止以后Oracle决定它可以为空。


@sdotdi 我该尝试什么?myMethod(null) 不会传递一个类似于 new Object[]{null} 的数组吗? - Ky -
顺便提一下,你这里的代码是有坏味道的。传递一个varargs对象数组意味着你的方法可以接受任何东西。我可以想象特定情况下这可能会有用,但我认为这通常是要避免的。 - Andrew Eisenberg
2
http://ideone.com/wP9AFE - Sotirios Delimanolis
2
如同 IDEA 建议的那样,null 可以通过强制类型转换 - (Object[]) null 显式地传递给可变参数方法,因此,在 Java 中传递 null 是可能的,你的检查是有意义的。 - RomanMitasov
1个回答

39

我在Linux 3.5.0-21-generic上尝试了Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0。

使用myMethod(null)不会传递new Object[]{null},而是直接传递nullJava中的数组是对象,因此null对于类型Object[]是有效的。

因此,您的空值检查并非过于谨慎。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接