181

Is it possible to declare a method that will allow a variable number of parameters ?

What is the symbolism used in the definition that indicate that the method should allow a variable number of parameters?

Answer: varargs

1
  • 13
    Since its homework, we don't want to know your question, we just want to know you are learning. Commented Nov 18, 2013 at 17:19

6 Answers 6

316

That's correct. You can find more about it in the Oracle guide on varargs.

Here's an example:

void foo(String... args) {
    for (String arg : args) {
        System.out.println(arg);
    }
}

which can be called as

foo("foo"); // Single arg.
foo("foo", "bar"); // Multiple args.
foo("foo", "bar", "lol"); // Don't matter how many!
foo(new String[] { "foo", "bar" }); // Arrays are also accepted.
foo(); // And even no args.
Sign up to request clarification or add additional context in comments.

6 Comments

Is it possible to do various type of paramteres? e.g. (String...strs, int... ints). What about just any type of argument in any order?
@trusktr: if you want any object, just use Object....
@trusktr No, primitives are not objects. There is a great explanation of the difference here: programmerinterview.com/index.php/java-questions/…
@Richard: Using Object... args will work with primitives because of autoboxing.
@StevenVascellaro : I assume that the arguments are handled like an array, so you could probably simply do varargs.length
|
18
Variable number of arguments

It is possible to pass a variable number of arguments to a method. However, there are some restrictions:

  • The variable number of parameters must all be the same type
  • They are treated as an array within the method
  • They must be the last parameter of the method

To understand these restrictions, consider the method, in the following code snippet, used to return the largest integer in a list of integers:

private static int largest(int... numbers) {
     int currentLargest = numbers[0];
     for (int number : numbers) {
        if (number > currentLargest) {
            currentLargest = number;
        }
     }
     return currentLargest;
}

source Oracle Certified Associate Java SE 7 Programmer Study Guide 2012

Comments

18

Yes, it's possible:

public void myMethod(int... numbers) { /* your code */ }

1 Comment

not precised enough to understand
14

For different types of arguments, there is 3-dots :

public void foo(Object... x) {
    String myVar1  = x.length > 0 ? (String)x[0]  : "Hello";
    int myVar2     = x.length > 1 ? Integer.parseInt((String) x[1]) : 888;
} 

Then call it

foo("Hii"); 
foo("Hii", 146); 

for security, use like this:
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

The main drawback of this approach is that if optional parameters are of different types you lose static type checking. Please, see more variations .

Comments

6

Yup...since Java 5: http://java.sun.com/j2se/1.5.0/docs/guide/language/varargs.html

Comments

0

Yes Java allows vargs in method parameter .

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.