Java varargs method with single null argument

Calling Java varargs method with single null argument

1. Overview

In this article, we will learn to call Java varargs method with a single null argument.

2. Java varargs method with single null argument

As Java cannot determine the type of literal null, you must explicitly inform the type of the literal null to Java. Failing to do so will result in an NullPointerException.

For example, the following main method invokes the foo method with literal null. There is no information on the argument type.

public static void main(String[] args){
      foo(null);
   }
   private static void foo(Object...args) {
      System.out.println("Variable arguments : " + Arrays.asList(args));
   }

If you execute the above code, it would result in the following error.

warning: non-varargs call of varargs method with inexact argument type for last parameter;
      foo(null);
          ^
  cast to Object for a varargs call
  cast to Object[] for a non-varargs call and to suppress this warning
1 warning
Exception in thread "main" java.lang.NullPointerException
	at java.base/java.util.Objects.requireNonNull(Objects.java:208)
	at java.base/java.util.Arrays$ArrayList.<init>(Arrays.java:4137)
	at java.base/java.util.Arrays.asList(Arrays.java:4122)
	at Temp.foo(Temp.java:15)
	at Temp.main(Temp.java:7)

Now, let’s see the alternative ways to avoid this error and pass a null value as varargs parameter.

2.1. Cast to Object for a Java varargs call

The first option is to cast the null explicitly to the Object type.

public static void main(String[] args){
      foo((Object) null);
   }
   private static void foo(Object...args) {
      System.out.println("Variable arguments : " + Arrays.asList(args));
   }
/* prints
Variable arguments : [null] */

2.1. Strongly typed variable with null

The next option is to create a strongly typed variable and assign null to it. Then, pass that variable as an argument to the varargs.

public static void main(String[] args){
      Object bar = null;
      foo(bar);
   }
   private static void foo(Object...args) {
      System.out.println("Variable arguments : " + Arrays.asList(args));
   }
/* prints
Variable arguments : [null] */

2.2. Simply call with no argument

Alternatively, you can completely ignore passing null or any value to the vararg.

For example, the following main method invokes the foo without passing any value to the varargs parameter.

public static void main(String[] args){
      foo();
   }
   private static void foo(Object...args) {
      System.out.println("Variable arguments : " + Arrays.asList(args));
   }
/* prints
Variable arguments : [] */

3. Conclusion

To sum up, we have learned to call Java varargs method with a null literal.

Leave a Reply

Your email address will not be published. Required fields are marked *