Java Language
Varargs (переменный аргумент)
Поиск…
замечания
Аргумент метода «varargs» позволяет вызывающим сторонам этого метода указывать несколько аргументов назначенного типа, каждый из которых является отдельным аргументом. Он указан в объявлении метода тремя периодами ASCII ( ...
) после базового типа.
Сам метод получает эти аргументы как один массив, тип элемента которого является типом аргумента varargs. Массив создается автоматически (хотя вызывающим абонентам по-прежнему разрешено передавать явный массив вместо передачи нескольких значений в виде отдельных аргументов метода).
Правила для варгаров:
- Варанг должен быть последним аргументом.
- В методе может быть только один Varargs.
Вы должны следовать выше правилам, иначе программа даст ошибку компиляции.
Указание параметра varargs
void doSomething(String... strings) {
for (String s : strings) {
System.out.println(s);
}
}
Три периода после окончательного параметра указывают, что последний аргумент может быть передан как массив или как последовательность аргументов. Варгары могут использоваться только в конечной позиции аргумента.
Работа с параметрами Varargs
Используя varargs в качестве параметра для определения метода, можно передать либо массив, либо последовательность аргументов. Если последовательность аргументов передана, они автоматически преобразуются в массив.
В этом примере показан как массив, так и последовательность аргументов, передаваемых в метод printVarArgArray()
, и то, как они обрабатываются одинаково в коде внутри метода:
public class VarArgs {
// this method will print the entire contents of the parameter passed in
void printVarArgArray(int... x) {
for (int i = 0; i < x.length; i++) {
System.out.print(x[i] + ",");
}
}
public static void main(String args[]) {
VarArgs obj = new VarArgs();
//Using an array:
int[] testArray = new int[]{10, 20};
obj.printVarArgArray(testArray);
System.out.println(" ");
//Using a sequence of arguments
obj.printVarArgArray(5, 6, 5, 8, 6, 31);
}
}
Выход:
10,20,
5,6,5,8,6,31
Если вы определите метод, подобный этому, он даст ошибки времени компиляции.
void method(String... a, int... b , int c){} //Compile time error (multiple varargs )
void method(int... a, String b){} //Compile time error (varargs must be the last argument