Главная страница

АБОБА. Справочник по программированию на Java Методическое пособие


Скачать 242.41 Kb.
НазваниеСправочник по программированию на Java Методическое пособие
АнкорАБОБА
Дата20.02.2022
Размер242.41 Kb.
Формат файлаdocx
Имя файла12642_java_method_1.docx
ТипСправочник
#368066
страница42 из 67
1   ...   38   39   40   41   42   43   44   45   ...   67

Аргументы переменной длины


В JDK 5 была добавлена новая функциональная возможность, которая упрощает создание методов, принимающих переменное количество аргументов. Эта функциональная возможность получила название varargs (сокращение термина variable-length arguments – аргументы переменной длины). Метод, который принимает переменное число аргументов, называют методом переменной арности, или просто методом varargs.

Ситуации, в которых методу нужно передавать переменное количество аргументов, встречаются не так уж редко. Например, метод, который открывает подключение к Internet, может принимать имя пользователя, пароль, имя файла, протокол и тому подобное, но применять значения, заданные по умолчанию, если какие-либо из этих сведений опущены. В этой ситуации было бы удобно передавать только те аргументы, для которых заданные по умолчанию значения не применимы. Еще один пример – метод printf(), входящий в состав библиотеки ввода-вывода Java.

// Использование массива для передачи методу переменного

// количества аргументов. Это старый стиль подхода

// к обработке аргументов переменной длины.

class PassArray {

static void vaTest(int v[]) {

System.out.print("Количество аргументов: " + v.length +

" Содержимое: ");

for(int x : v)

System.out.print(x + " ");

System.out.println();

}

public static void main(String args[])

{

// Обратите внимание на способ создания массива

// для хранения аргументов.

int n1[] = { 10 };

int n2[] = { 1, 2, 3 };

int n3[] = { };

vaTest(n1); // 1 аргумент

vaTest(n2); // 3 аргумента

vaTest(n3); // без аргументов

}

}

Эта программа создает следующий вывод:

Количество аргументов: 1 Содержимое: 10

Количество аргументов: 3 Содержимое: 1 2 3

Количество аргументов: 0 Содержимое:

В программе методу vaTest() аргументы передаются через массив v. Этот старый подход к обработке аргументов переменной длины позволяет методу vaTest() принимать любое число аргументов. Однако он требует, чтобы эти аргументы были вручную помещены в массив до вызова метода vaTest(). Создание массива при каждом вызове метода vaTest() не только трудоемкая, но и чреватая ошибками задача. Функциональная возможность использования методов varargs обеспечивает более простой и эффективный подход.

Для указания аргумента переменной длины используют три точки (...). Например, вот как метод vaTest() можно записать с использованием аргумента переменной длины:

static void vaTest(int ... v) {

Эта синтаксическая конструкция указывает компилятору, что метод vaTest() может вызываться с нулем или более аргументов. В результате v неявно объявляется как массив типа int[]. Таким образом, внутри метода vaTest() доступ к v осуществляется с использованием синтаксиса обычного массива. Предыдущая программа с применением метода vararg приобретает следующий вид:

// Демонстрация использования аргументов переменной длины.

class VarArgs {

// теперь vaTest() использует аргументы переменной длины.

static void vaTest(int ... v) {

System.out.print("Количество аргументов: " + v.length +

" Содержимое: ");

For(int x : v)

System.out.print(x + " ");

System.out.println();

}

public static void main(String args[])

{

// Обратите внимание на возможные способы вызова

// vaTest() с переменным числом аргументов.

vaTest(10); // 1 аргумент

vaTest(1, 2, 3); // 3 аргумента

vaTest(); // без аргументов

}

}

Вывод этой программы совпадает с выводом исходной версии.

Наряду с параметром переменной длины массив может содержать “нормальные” параметры. Однако параметр переменной длины должен быть последним параметром, объявленным методом. Существует еще одно ограничение, о котором следует знать: метод должен содержать только одни параметр типа varargs.

Метод, который принимает аргумент переменной длины, можно перегружать.

// Параметры vararg и перегрузка.

class VarArgs3 {

static void vaTest(int ... v) {

System.out.print("vaTest(int ...): " +

"Количество аргументов: " + v.length +

" Содержимое: ");

for(int x : v)

System.out.print(x + " ");

System.out.println();

}

static void vaTest(boolean ... v) {

System.out.print("vaTest(boolean ...) " +

"Количество аргументов: " + v.length +

" Содержимое: ");

for(boolean x : v)

System.out.print(x + " ");

System.out.println();

}

static void vaTest(String msg, int ... v) {

System.out.print("vaTest(String, int ...): " +

msg + v.length +

" Содержимое: ");

for(int x : v)

System.out.print(x + " ");

System.out.println();

}

public static void main(String args[])

{

vaTest(1, 2, 3);

vaTest("Проверка: ", 10, 20);

vaTest(true, false, false);

}

}

Эта программа создает следующий вывод:

vaTest(int ...): Количество аргументов: 3 Содержимое: 1 2 3

vaTest(String, int ...): Проверка: 2 Содержимое: 10 20

vaTest(boolean ...) Количество аргументов: 3 Содержимое: true false false
1   ...   38   39   40   41   42   43   44   45   ...   67


написать администратору сайта