Calling Java varargs method with single null argument?
java, language-design, null, variadic-functions
Solution
The issue is that when you use the literal null, Java doesn't know what type it is supposed to be. It could be a null Object, or it could be a null Object array. For a single argument it assumes the latter.
You have two choices. Cast the null explicitly to Object or call the method using a strongly typed variable. See the example below:
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));
}
}
Output:
foo called, args: [a, b, c]
foo called, args: [null, null]
foo called, args: [null]
foo called, args: [null]
Problem
If I have a vararg Java method `foo(Object ...arg)` and I call `foo(null, null)`, I have both `arg[0]` and `arg[1]` as `null`s. But if I call `foo(null)`, `arg` itself is null. Why is this happening? How should I call `foo` such that `foo.length == 1 && foo[0] == null` is `true`?