From version 5 of Java you can call a method passing a variable number of arguments.
A variable of this type is called varargs, you can only use in a method signature and its syntax is the primitive type or object type followed by 3 dots (ellipsis).
An example is the following:
package eu.lucazanini.varargs; public class Main { public static void main(String[] args) { varargs(1, 2); } public static void varargs(int... x) { System.out.println("varargs"); for (int i : x) { System.out.println(i); } } }
where the variable x is an array containing all the values passed (in this example x[0] is equal to 1).
This way has some limitations:
- you can use the variable varargs only one time in a method
- the variable varargs must be at the last place in the method signature
As variable varargs you can pass null or no value; in the above example the call varargs() is like varargs(new int[0]) where new int[0] is an empty array but not null.
In situations of ambiguity for overloaded methods the call to method with varargs is always loser as you see from the following examples:
- example 1:
package eu.lucazanini.varargs; public class Main { public static void main(String[] args) { varargs(1, 2); } // not called public static void varargs(int... x) { System.out.println("varargs"); for (int i : x) { System.out.println(i); } } // called public static void varargs(int x, int y) { System.out.println("int int"); System.out.println(x); System.out.println(y); } }
- example 2 (boxing):
package eu.lucazanini.varargs; public class Main { public static void main(String[] args) { varargs(1, 2); } // not called public static void varargs(int... x) { System.out.println("varargs"); for (int i : x) { System.out.println(i); } } // called public static void varargs(Integer x, Integer y) { System.out.println("Integer Integer"); System.out.println(x); System.out.println(y); } }
- example 3 (widening):
package eu.lucazanini.varargs; public class Main { public static void main(String[] args) { varargs(1, 2); } // not called public static void varargs(int... x) { System.out.println("varargs"); for (int i : x) { System.out.println(i); } } // called public static void varargs(long x, long y) { System.out.println("long long"); System.out.println(x); System.out.println(y); } }
Leave a Reply