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

148

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

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

Ответ: варагс

user69514
источник
11
Поскольку это домашнее задание, мы не хотим знать ваш вопрос, мы просто хотим знать, что вы изучаете.
HDave

Ответы:

276

Это правильно. Вы можете найти больше об этом в руководстве 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.
BalusC
источник
1
Можно ли сделать различные типы параметров? например (String ... strs, int ... ints). Как насчет любого типа аргумента в любом порядке?
trusktr
5
@trusktr: если вы хотите какой-либо объект, просто используйте Object....
BalusC
2
@trusktr Нет, примитивы не являются объектами. Здесь есть отличное объяснение разницы: programmerinterview.com/index.php/java-questions/…
Дик Лукас
5
@Richard: Использование Object... argsбудет работать с примитивами из-за автобокса .
Sumit
1
@StevenVascellaro: Я предполагаю, что аргументы обрабатываются как массив, так что вы, вероятно, могли бы просто это сделатьvarargs.length
LMD
15
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 Programmer Study Guide 2012

Абей Элла
источник
14

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

public void myMethod(int... numbers) { /* your code */ }
Дольф
источник
10

Для разных типов аргументов есть 3 точки :

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;
} 

Тогда назови это

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

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

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

T.Todua
источник
0

Да, Java позволяет vargsв параметре метода.

public class  Varargs
{
   public int add(int... numbers)
   { 
      int result = 1; 
      for(int number: numbers)
      {
         result= result+number;  
      }  return result; 
   }
}
Code_Eat_Sleep
источник