Передача нескольких параметров в качестве одного параметра в Java

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

public void aMethod(int...a)  

Но больше я об этом ничего не знаю. Я видел пример, и он вернул среднее значение переданных целых чисел.
Является ли это устаревшим способом передачи параметров? Это вообще допустимо использовать? Каков именно синтаксис при этом? (некоторые справочные материалы были бы отличными)


person Retsam    schedule 18.03.2009    source источник


Ответы (2)


Это называется varargs (из синтаксиса C). См. руководство Sun по переменным аргументам для обзора и этот Технический совет JDC для использования. Он не устарел; это было внесено как запрос функции, поскольку ранее вы были вынуждены создавать массив или список, что было действительно уродливо для поддержки чего-то вроде C printf.

public void myMethod(String... args) {
    for (String aString:args) {
        System.out.println(aString);
    }
}
person Travis Jensen    schedule 18.03.2009
comment
Что касается того, когда его использовать, varargs действительно снижает производительность. Так что используйте его только тогда, когда вам действительно нужно его использовать. Я столкнулся с очень небольшими проблемами в java, когда я подумал: «Чувак, я действительно мог бы использовать здесь varargs» (на ум приходит только printf) - person wds; 18.03.2009

Вам нужно будет передать список ints методу, чтобы сделать это, что-то вроде этого:

public void aMethod(int[] list)

или это:

public void aMethod(ArrayList<int> list)

Было бы неплохо, если бы в Java было что-то вроде ключевого слова params в C#, но его нет.

person Andrew Hare    schedule 18.03.2009
comment
Весь смысл нотации varargs в том, что вам НЕ нужно передавать явный массив или список. - person joel.neely; 18.03.2009
comment
Я не большой любитель Java, поэтому я понятия не имел, что это существует! Хорошо знать! - person Andrew Hare; 18.03.2009