一尘不染

用单个null参数调用Java varargs方法?

java

如果我有一个vararg Java方法foo(Object ...arg)并调用foo(null, null),则我arg[0]arg[1]as 都将null。但是,如果我呼叫foo(null),则arg其本身为null。为什么会这样呢?

我应该怎么称呼foo这样foo.length == 1 && foo[0] == nulltrue


阅读 354

收藏
2020-03-24

共1个答案

一尘不染

问题是,当你使用原义null时,Java不知道它应该是哪种类型。它可以是空对象,也可以是空对象数组。对于单个参数,假定为后者。

你有两种选择。将null显式转换为Object或使用强类型变量调用该方法。请参见下面的示例:

public class Temp{
   public static void main(String[] args){
      foo("a", "b", "c");
      foo(null, null);
      foo((Object)null);
      Object bar = null;
      foo(bar);
   }

   private static void foo(Object...args) {
      System.out.println("foo called, args: " + asList(args));
   }
}

输出:

foo called, args: [a, b, c]
foo called, args: [null, null]
foo called, args: [null]
foo called, args: [null]
2020-03-24