我在我的方法中一直使用Java的变量参数,并且通过传入null作为参数来测试它们:
public void method(Object A, Object...b) {
if(A == null || b == null || b.length == 0) return;
...(something that invokes b)...
public void test() {
method(new Object(), null)
...
在方法的开头,我检查了null作为参数,甚至长度为0.但由于测试因NullPointerException
而一直失败,我运行了调试器,{{ 1}}长度为1!当我点击b
,
b
我最终通过检查长度1和元素0为空来解决这个问题,但是 有没有人解释为什么Java这样做?谢谢!
答案 0 :(得分:17)
因为您传递的值为null
。
如果您希望varargs方法接收空数组
明确传递:
method(new Object(), new Object[0])
根本没有通过任何事情:
method(new Object())
选项2更具惯用性。
答案 1 :(得分:2)
null
是一个值。
您为varargs参数提供单个值,因此数组将为new Object[] { null }
,其长度为1。
如果您想完全不传递任何值,则必须致电method(new Object());
。