Вы можете перегружать метод с аргументом переменной длины. В листинге 5.4 приведена программа, в которой метод vaTest () перегружается трижды.
Листинг 5.4. Аргументы переменной длины и перегрузка метода
class VarArgs3 {
static void vaTest(int ... v) {
System.out.print("vaTest(int ...): " +
"Number of args: " + v.length +
" Contents: ");
for(int x : v)
System.out.print(x + " ");
System.out.println();
}
static void vaTest(boolean ... v) {
System.out.print("vaTest(boolean ...) " +
"Number of args: " + v.length +
" Contents: ");
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 +
" Contents: ");
for(int x : v)
System.out.print(x + " ");
System.out.println();
}
public static void main(String args[])
{
vaTest(1, 2, 3);
vaTest("Testing: ", 10, 20);
vaTest(true, false, false);
vaTest(); // Ошибка: неоднозначность!
}
}
Далее приведен вывод, формируемый программой из листинга 5.4:
vaTest (int...) : Number of args: 3 Contents: 1 2 3
vaTest (String, int...) : Testing: 2 Contents: 10 20
vaTest (boolean...) : Number of args: 3 Contents: true false false
В листинге 5.4 показаны два варианта перегрузки метода, содержащего аргумент переменной длины. Первый вариант — vaTest (boolean...) — отличается от vaTest (int...) типом параметра переменной длины. Напоминаю, что символьная комбинация ... заставляет интерпретировать параметр как массив заданного типа. Таким образом, так же, как Вы можете перегружать методы при использовании разных типов элементов массива-параметра, Вы можете перегружать методы при использовании разных типов параметров переменной длины. В этом случае язык Java по различию типов определяет, какой из перегруженных методов вызвать.
Во втором варианте перегрузки метода — vaTest (String, int...) — в метод с параметром переменной длины добавлен обычный параметр. В этой ситуации язык Java анализирует число аргументов и их тип для того, чтобы определить какой вариант метода вызвать.
|