В вашем примере вы могли бы назвать это любым из следующих способов:
myMethod(); // Likely useless, but possible myMethod("one", "two", "three"); myMethod("solo"); myMethod(newString[]{"a", "b", "c"});
Важное примечание: Аргумент (ы), передаваемый таким образом, всегда является массивом, даже если он всего один. Убедитесь, что вы обрабатываете его таким образом в теле метода.
Важное примечание 2: Аргумент, который получает ..., должен быть последним в сигнатуре метода. Итак, myMethod(int i, String... strings) это нормально, но myMethod(String... strings, int i) это не нормально.
Спасибо Вашему за разъяснения в его комментарии.
Ответ 2
Эта функция называется varargs, и это функция, представленная в Java 5. Это означает, что функция может получать несколько String аргументов:
myMethod("foo", "bar"); myMethod("foo", "bar", "baz"); myMethod(newString[]{"foo", "var", "baz"}); // you can even pass an array
Затем вы можете использовать String var в качестве массива:
publicvoidmyMethod(String... strings) { for (String whatever : strings) { // do what ever you want }
// the code above is equivalent to for (inti=0; i < strings.length; i++) { // classical for. In this case you use strings[i] } }
Этот ответ сильно заимствован у кисвы и Лоренцо... а также из комментария Graphain .
Ответ 3
Это Varargs:)
Сокращение varargs от аргументов переменной длины - это функция, которая позволяет методу принимать переменное количество аргументов (ноль или более). С помощью varargs стало проще создавать методы, которые должны принимать переменное количество аргументов. В Java 5 добавлена функция variable argument.
Синтаксис varargs
vararg обозначается тремя многоточиями (тремя точками) после типа данных, его общая форма такова
До Java 5 на случай, если возникала необходимость в переменном количестве аргументов, существовало два способа справиться с этим
Если максимальное количество аргументов, которое может принимать метод, было небольшим и известным, то могли быть созданы перегруженные версии метода. Если максимальное количество аргументов, которое может принять метод, было большим или / и неизвестным, то подход заключался в том, чтобы поместить эти аргументы в массив и передать их методу, который принимает array в качестве параметра. Эти два подхода были подвержены ошибкам - каждый раз создавался массив параметров, и их было сложно поддерживать, - поскольку добавление нового аргумента может привести к написанию нового перегруженного метода.
Преимущества varargs
Предлагает гораздо более простой вариант. Меньше кода, так как нет необходимости писать перегруженные методы.
Number of arguments passed 4 var args are passed Number of arguments passed 3 Three args passed Number of arguments passed 0
Из программы видно, что length используется здесь для определения количества аргументов, передаваемых методу. Это возможно, потому что переменные значения неявно передаются в виде массива. Любые аргументы, передаваемые как переменные, хранятся в массиве, на который ссылается имя, данное varargs. В этой программе имя массива - values . Также обратите внимание, что метод вызывается с разным количеством аргументов, сначала вызывается с четырьмя аргументами, затем с тремя аргументами, а затем с нулевыми аргументами. Все эти вызовы обрабатываются одним и тем же методом, который принимает varargs .
Ограничение с помощью varargs
В методе могут быть другие параметры с параметром varargs, однако в этом случае параметр varargs должен быть последним параметром, объявленным методом.
voiddisplayValues(int a, int b, int … values)// OK voiddisplayValues(int a, int b, int … values, int c)// compiler error
Еще одно ограничение, связанное с varargs, заключается в том, что должен быть только один параметр varargs.
voiddisplayValues(int a, int b, int … values, int … moreValues)// Compiler error
Перегрузка методов varargs
Возможно перегрузить метод, который принимает параметр varargs. Метод Varargs может быть перегружен с помощью -
Типы его параметра vararg могут отличаться. Путем добавления других параметров. Пример перегрузки метода varargs
publicclassOverloadingVarargsExp { // Method which has string vararg parameter publicvoiddisplayData(String ... values){ System.out.println("Number of arguments passed " + values.length); for(String s : values){ System.out.println(s + " "); } }
// Method which has int vararg parameter publicvoiddisplayData(int ... values){ System.out.println("Number of arguments passed " + values.length); for(int i : values){ System.out.println(i + " "); } }
// Method with int vararg and one more string parameter publicvoiddisplayData(String a, int ... values){ System.out.println(" a " + a); System.out.println("Number of arguments passed " + values.length); for(int i : values){ System.out.println(i + " "); } }
В этой программе, когда мы вызываем метод displayData() без какого-либо параметра, он выдает ошибку, потому что компилятор не уверен, предназначен ли этот вызов метода для displayData(String ... values) или displayData(int ... values)
Точно так же, если у нас есть перегруженные методы, в которых у одного есть vararg метод одного типа, а у другого метода есть один параметр и vararg параметр того же типа, тогда мы также имеем двусмысленность - Как Exp - displayData(int ... values) и displayData(int a, int ... values)
Эти два перегруженных метода всегда будут иметь неоднозначность.
Ответ 4
Это способ Java передавать varargs (аргументы с переменным числом).
Если вы знакомы с C, это похоже на ... синтаксис, используемый в printf функции:
intprintf(const char * format, ...);
но типобезопасным способом: каждый аргумент должен соответствовать указанному типу (в вашем примере они должны быть все String).
Это простой пример того, как вы можете использовать varargs: