The varargs (variable arguments) introduced in jdk1.5, where we can define a method which can take multiple numbers of parameters. In case of varargs we know need to write overloaded methods. We define a single method which can take n numbers of arguments.
Here we will see –
- What is the syntax to define varargs and what is the benefit of varargs?
- Valid and invalid syntaxes for varargs.
- Use of varargs in real time project.
What is the syntax to define varargs and what is the benefit of varargs?
Syntax –
public void m1(int... a){ }
Let’s see an example of varargs-
public class VarArgsExample { public void m1(int... a) { System.out.println("this method can take any number of parameters"); } public static void main(String[] args) { VarArgsExample argsExample = new VarArgsExample(); argsExample.m1(10, 20, 5, 6, 30);// we can n number of parameters } }
Output is – this method can take any number of parameters
In the above program, we have defined method m1() which can n number of arguments. Let’s see what is the problem without varargs. Suppose we have a requirement to add some number. We can have two number or three or five or ten.
Program without varargs –
public class VarArgsExample { public void sumOfNumbers(int a, int b) { System.out.println("sum of two numbers " + (a + b)); } public void sumOfNumbers(int a, int b, int c) { System.out.println("sum of three numbers " + (a + b + c)); } public void sumOfNumbers(int a, int b, int c, int d) { System.out.println("sum of four numbers " + (a + b + c + d)); } public static void main(String[] args) { VarArgsExample argsExample = new VarArgsExample(); argsExample.sumOfNumbers(10, 20); argsExample.sumOfNumbers(10, 20, 30); argsExample.sumOfNumbers(10, 20, 30, 40); } }
Output is –
sum of two numbers 30
sum of three numbers 60
sum of four numbers 100
Program with varargs –
public class VarArgsExample { public void sumOfNumbers(int... a) { int sum = 0; for (int i = 0; i < a.length; i++) { sum = sum + a[i]; } System.out.println("sum of " + a.length + " numbers is " + sum); } public static void main(String[] args) { VarArgsExample argsExample = new VarArgsExample(); argsExample.sumOfNumbers(10, 20); argsExample.sumOfNumbers(10, 20, 30); argsExample.sumOfNumbers(10, 20, 30, 40); } }
Output is –
sum of 2 is 30
sum of 3 is 60
sum of 4 is 100
In above example we are performing the same operation in a single method(Just for example, In real time, the scenario may be different, we will see later). We no need to define multiple overloaded version of sumOfNumbers() method.
Benefit of varargs –
We can reduce a lot of code using var args.
Valid and invalid syntaxes for varargs.
Valid declaration of varargs –
public void validDeclartion1(int... a) { //this is a valid declaration of var args } public void validDeclartion1(int ...a) { //this is a valid declaration of var args } public void validDeclartion2(int...a) { //this is a valid declaration of var args } public void validDeclartion3(int a, String... s) { //varargs must be last parameter }
Invalid declarations of varargs –
public void validDeclartion2(int... a, String s) { //varargs must be in last, if we have multiple parameter }
Use of varargs in real time project.
Real time scenario 1 –
Suppose you want to create a composite key in hibernate on basis of two attributes in a table. We can define a method something called createPrimaryKey(Object… columName ), you can pass multiple ids which can be used to create a composite key.
Object createPrimaryKey(Object... columName )
Real time scenario 2 –
Suppose you have a requirement, where we have to define a constructor which can take multiple numbers of list of Stringstrings. One option is we can define multiple overloaded version of the constructor or we can use varargs as a parameter in constructor. Let’s see an example –
import java.util.Arrays; import java.util.List; public class VarArgsExample { private List<List<String>> listOfString; public VarArgsExample(List<String>... listOfString) { this.listOfString = Arrays.asList(listOfString); System.out.println("This is just a dummy example " + listOfString); } public static void main(String[] args) { VarArgsExample argsExample = new VarArgsExample(); } }
Output is – This is just a dummy example [Ljava.util.List;@15db9742