VarArgs в Java

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Данная статья:


Привет! Это статья про VarArgs в Java.

Что такое VarArgs

Наверняка, если Вы читаете эту статью, Вы уже написали не один метод и даже не десять. И, конечно, Вам известно, что для каждого метода мы задаем типы параметров, которые требуются для работы метода. Например:

void myMethod(String s)

требует для работы одну переменную типа String, или

int findMax(int a, int b)

просит две переменные типа int.

Тем не менее, в Java есть еще одна "специальная" возможность работы с аргументами. Давайте приведем пример.

Представим, что нам нужно создать метод, который складывает переменные типа int.

Назовем этот метод addAll(). Сначала представим, что у нас два аргумента. Пишем такой код:

Отлично! А что если мы хотим получить сумму трех чисел? Добавим еще один метод, только уже с тремя аргументами:

Замечательно. И запустим:

Получим корректный результат:

Но а что, если мы хотим сложить четыре int-а? Пять int-ов? Шесть int-ов?.. Что, писать для каждого свой метод? Нет, это не выход. Именно тут нам и поможет VarArgs.

VarArgs переводится как Variable Arguments List - что-то типа "список аргументов переменной длины", или "список переменной длины, в которой лежат аргументы":

Итак, вместо того, чтобы задавать конкретное количество аргументов - два, три, четыре - мы можем сказать Java, что мы не знаем, сколько их будет 🙂 Но метод все равно сработает, и будет иметь доступ ко всем заданным аргументам. Давайте перепишем наш метод, используя VarArgs:

Как видите, для наглядности мы добавили еще и вывод в консоль.

Теперь если запустить тот же main, все сработает корректно:

Получаем:

Заметьте - у нас всего один метод вместо двух, но он принимает и да, и три аргумента. Если мы напишем десять аргументов, он тоже отработает корректно:

Получаем:

Отлично! Теперь давайте рассмотрим VarArgs чуть-чуть ближе.

Синтаксис VarArgs

Как Вы могли заметить, переменная VarArgs очень похожа на обычную, только между типом и названием ставятся три точки:

Естественно, тип может быть любым - String, long, float и т.д.

Кроме того, возможна и такая запись:

Т.е. кроме аргумента VarArgs можно передавать и другие аргументы. Но обратите внимание, что аргумент VarArgs должен стоять последним в списке аргументов, то есть после него не может быть ни одного аргумента, но перед ним сколько угодно 🙂

Другие особенности

И напоследок обратим Ваше внимание еще на несколько моментов.

Внутри метода мы работаем с VarArgs как с массивом

Возможно Вы заметили, что в нашем примере мы обращались к элементам VarArgs по индексу, и узнавали длину с помощью .length.

А если ноль аргументов - VarArgs тоже будет работать?

Давайте попробуем не передать ни одного аргумента в метод с VarArgs. Напишем следующий код:

Что мы получим в консоли? Видим следующее:

Отлично! Мы не видим сообщений об ошибке, метод отработаю корректно. Это значит, что мы можем задавать от нуля до... бесконечности аргументов в VarArgs 🙂


Надеемся, что наша статья была Вам полезна.  Можно записаться к нам на курсы по Java на сайте.

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr

Facebooktwittergoogle_plustumblrFacebooktwittergoogle_plustumblr
Самоучители--узнать детальнее--