Java varargs 可以为空吗? [复制]

Posted

技术标签:

【中文标题】Java varargs 可以为空吗? [复制]【英文标题】:Can a Java varargs be null? [duplicate] 【发布时间】:2015-04-01 00:19:03 【问题描述】:

我发现自己正在检查这个并询问是否有必要。我有这样的代码:

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

但后来我想……我是不是太谨慎了? 我必须检查many == null 吗?在任何当前的 Java 版本中是否有可能? 如果可以,如何实现?如果不是,我可能会继续检查,以防万一甲骨文决定有一天它可能为空。

【问题讨论】:

@sdotdi 我会尝试什么? myMethod(null) 不会像new Object[]null 这样的数组传递给它吗? 附带说明,您这里的代码是代码异味。传入可变参数对象数组意味着您的方法可以接受任何内容。我可以想象这可能有用的特定情况,但我会说这通常是要避免的。 ideone.com/wP9AFE 正如 IDEA 所建议的,null 可以通过强制转换显式传递给可变参数方法 - (Object[]) null,所以是的,在 Java 中传递 null 是可能的,并且您的检查是有意义的 【参考方案1】:

我试过Java HotSpot(TM) 64-Bit Server VM, Java 1.8.0 on Linux 3.5.0-21-generic

使用myMethod(null) 不会通过new Object[]null,它会通过null。 Arrays are objects in Java 因此nullObject[] 类型有效。

因此,您的 nullcheck 并不过分谨慎。

【讨论】:

以上是关于Java varargs 可以为空吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

Java中的“this”可以为空吗?

Oracle 序列可以为空吗?

java.util.map中的key和value可以是空吗?

整数列可以为空吗?

在Java中使用for循环,我必须指定不为空吗?

mongo 非主键 objectid 可以为空吗