Вопрос 40 (аргументы переменной длины)
"Может ли метод принимать разное количество параметров (аргументы переменной длины)?"
1. Начиная с Java 5 и выше можно передавать методу переменное количество аргументов одного типа. Параметр в методе объявляется следующим образом:
[ИмяТипа]... [ИмяПараметра]
скрытый текст1.1. При объявлении метода Вы указываете тип, за которым следует многоточие (...). В методе может быть указан только один параметр переменной длины, и этот параметр должен быть последним параметром. Любые регулярные параметры должны предшествовать ему.
2. Когда мы вызываем метод с аргументом переменной длины, компилятор Java проходит эти аргументы слева направо и, как только он доходит до последнего параметра, создается массив из оставшихся аргументов и передается в метод. На самом деле, аргумент переменной длины ведет себя точно также, как и массив указанного типа, и доступ к нему осуществляется аналогично.
3. При перегрузке метода, принимающего аргумент переменной длины, могут случаться непредвиденные ошибки. Они связаны с неопределенностью, которая может возникать при вызове перегруженного метода с аргументом переменной длины.
3.1. Например, следующие перегруженные версии метода vaTest () изначально неоднозначны, несмотря на то, что одна из них принимает обычный параметр (т.е. отличается по сигнатуре):
static void vaTest(int ... v) {
// ...
static void vaTest(int n, int ... v) {
//...
}
Комментарии