Var Arg Methods
- Until Java 1.4 version we can’t declare a method with variable number of arguments if there is a change in number of arguments compulsory we should go for new method it increases the length of the code and reduces the readability. To overcome this problem SUN people introduces var arg methods in 1.5 version according to this we can declare a method which can take variable number of arguments such type of methods are called var arg methods.
- We can declare a var arguments method as follows
method1(int... x)
- We can call this method by passing any number of int values including zero number.
method1(); // Fine method1(10); // Fine method1(10,20,30); // Fine method1(10,20,30,40); // Fine
E.g
package com.ashok.test; public class Test{ public static void method1(int... x) { System.out.println("Hai this is Ashok"); } public static void main(String args[]){ method1(); // Hai this is Ashok method1(10); // Hai this is Ashok method1(10,20,30); // Hai this is Ashok method1(10,20,30,40); // Hai this is Ashok } }
Internally var arg parameter will be converted in to one dimensional array hence with in the var-arg method we can differentiate values by using index.
E.g
package com.ashok.test; public class Test { public static void sum(int... x) { int sum = 0; for(int y : x) { sum = sum + y; } System.out.println("Sum is : "+sum); } public static void main(String args[]) { sum(); // Sum is 0 sum(10,20);// Sum is 30 sum(10,20,30);// Sum is 60 } }
Case 1: Which of the following are valid?
method(int... x); // Fine method(int ...x); // Fine method(int x...); // Error method(int. x..); // Error method(int. ..x); // Error
Case 2: We can mix var arg parameter with normal parameter also
method(int x, String... s); // Fine
Case 3: We can mix var arg parameter with normal parameter but rule is it should be last parameter
method(int... x, String s); // Error
Case 4: In any var arg method we can take only one var arg parameter
method(int... x, String... s); // Error
Case 5: In general var arg method will get least priority i.e., if no other method matched then only var arg method will get chance. This is similar to default case inside switch.
package com.ashok.test; public class Test { public static void method() { System.out.println("It is general method"); } public static void method(int... x) { System.out.println("It is var arg method"); } public static void main(String args[]) { sum(); // It is general method sum(10,20);// It is var arg method sum(10,20,30);// It is var arg method } }
Case 6: Inside a class we can’t declare var arg method and it’s corresponding one dimensional array method simultaneously otherwise we will get compilation error.
package com.ashok.test; public class Test { public static void method(int[] a) { System.out.println("It is one dimensional array method"); } public static void method(int... x) { System.out.println("It is var arg method"); } public static void main(String args[]) { sum(); sum(10,20); sum(10,20,30); } } C.E: Cannot declare both method(int[]) and method(int...) in Test
Var arg vs Single dimensional arrays
Case 1: When ever single dimensional array present we can replace with var arg parameter.
E.g
m1(int[] x) --> m1(int.. x) // Fine m1(String[] x) --> m1(String.. x) // Fine
Case 2: When ever var arg parameter present we can’t replace with single dimensional array.
E.g
m1(int.. x) --> m1(int[] x) // Error