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 因此null
对Object[]
类型有效。
因此,您的 nullcheck 并不过分谨慎。
【讨论】:
以上是关于Java varargs 可以为空吗? [复制]的主要内容,如果未能解决你的问题,请参考以下文章