Varargs: аргументы переменной длины
В JDK 5 была добавлена новая функциональная возможность, которая упрощает создание методов, принимающих переменное количество аргументов. Эта функциональная возможность получила название varargs (сокращение термина variable-length arguments — аргументы переменной длины). Метод, который принимает переменное число аргументов, называют методом переменной арности, или просто методом varargs.
Ситуации, в которых методу нужно передавать переменное количество аргументов, встречаются не так уж редко. Например, метод, который открывает подключение к Internet, может принимать имя пользователя, пароль, имя файла, протокол и тому подобное, но применять значения, заданные по умолчанию, если какие-либо из этих сведений опущены. В этой ситуации было бы удобно передавать только те аргументы, для которых заданные по умолчанию значения не применимы. Еще один пример — метод printf (), входящий в состав библиотеки ввода-вывода Java. Как будет показано в главе 19, он принимает переменное число аргументов, которые форматирует, а затем выводит.
До появления версии J2SE 5 обработка аргументов переменной длины могла выполняться двумя способами, ни один из которых не был особенно удобным. Во-первых, если максимальное количество аргументов было небольшим и известным, можно было создавать перегруженные версии метода — по одной для каждого возможного способа вызова метода. Хотя этот способ подходит для ряда случаев, он применим только к узкому классу ситуаций.
В тех случаях, когда максимальное число возможных аргументов было большим или неизвестным, применялся второй подход, при котором аргументы помещались в массив, а затем массив передавался методу. Следующая программа иллюстрирует этот подход.
// Использование массива для передачи методу переменного // количества аргументов. Это старый стиль подхода // к обработке аргументов переменной длины. class PassArray ; int пЗ []=; vaTest(nl); // 1 аргумент vaTest(n2); // 3 аргумента vaTest(nЗ); // без аргументов
Эта программа создает следующий вывод:
Количество аргументов: 1 Содержимое: 10 Количество аргументов: 3 Содержимое: 1 2 3 Количество аргументов: 0 Содержимое:
В программе методу vaTest () аргументы передаются через массив v. Этот старый подход к обработке аргументов переменной длины позволяет методу vaTest () принимать любое число аргументов. Однако он требует, чтобы эти аргументы были вручную помещены в массив до вызова метода vaTest (). Создание массива при каждом вызове метода vaTest () не только трудоемкая, но и чреватая ошибками задача. Функциональная возможность использования методов varargs обеспечивает более простой и эффективный подход.
Для указания аргумента переменной длины используют три точки (. ). Например, вот как метод vaTest () можно записать с использованием аргумента Переменной длины:
static void vaTest(int . v)