Номер переменной Java или аргументы для метода

Можно объявить метод, который позволит переменное число параметров?

Каков символизм, используемый в определении, указывающий, что метод должен допускать переменное количество параметров?

Ответ: varargs

Ответ 1

Это правильно. Вы можете найти больше об этом в руководстве Oracle по varargs.

Вот пример:

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

который можно назвать

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.

Ответ 2

Да, возможно:

public void myMethod(int...numbers) { ... }

Ответ 3

Variable number of arguments

Можно передать переменное количество аргументов в метод. Однако там есть некоторые ограничения:

  • Переменные числа параметров должны быть одного типа
  • Они рассматриваются как массив внутри метода
  • Они должны быть последним параметром метода

Чтобы понять эти ограничения, рассмотрите метод в следующем фрагменте кода, который используется для возврата наибольшего целого числа в список целых чисел:

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

источник Учебное пособие для программистов по программе Oracle Certified Associate Java SE 7 2012

Ответ 5

Если вы можете использовать разные типы аргументов, используйте:

public void foo(Object... x) {
    String first    =  x.length > 0 ? (String)x[0]  : "Hello";
    int duration    =  x.length > 1 ? Integer.parseInt((String) x[1])     : 888;
}   
foo("Hii", ); 
foo("Hii", 146); 

для обеспечения безопасности используйте следующее:   
if (!(x[0] instanceof String)) { throw new IllegalArgumentException("..."); }

Основным недостатком этого подхода является то, что если необязательные параметры имеют разные типы, вы теряете контроль статического типа. Пожалуйста, смотрите больше вариантов.

Ответ 6

Да Java разрешает vargs в параметре метода.

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