使用单个空参数调用 Java varargs 方法?
2022-08-31 10:04:27
如果我有一个 vararg Java 方法,并且我调用 ,我两者都有 和 as s。但是如果我调用 ,它本身是空的。为什么会发生这种情况?foo(Object ...arg)
foo(null, null)
arg[0]
arg[1]
null
foo(null)
arg
我应该如何称呼这样?foo
foo.length == 1 && foo[0] == null
true
如果我有一个 vararg Java 方法,并且我调用 ,我两者都有 和 as s。但是如果我调用 ,它本身是空的。为什么会发生这种情况?foo(Object ...arg)
foo(null, null)
arg[0]
arg[1]
null
foo(null)
arg
我应该如何称呼这样?foo
foo.length == 1 && foo[0] == null
true
问题是,当您使用文本 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]
您需要显式强制转换为 :Object
foo((Object) null);
否则,参数被假定为 varargs 表示的整个数组。