Я не понимаю этот синтаксис. Попытка Google разных слов плюс "..." бесполезна.
Что означает "..." в списке параметров? doInBackground (String... params)
Ответ 1
Это называется Variadic function (wiki-страница с примерами во многих languges).
В компьютерном программировании функция является функцией неопределенного arity, то есть тот, который принимает переменное количество аргументов. Поддержка для вариационных функций среди языков программирования. Есть многие математические и логические операции, которые как вариационные функции. Например, суммирование чисел или конкатенация строк или других последовательности - это операции, которые могут логически применимы к любому числу операнды. Другая операция, которая был реализован как вариационный функция на многих языках выводится форматирование. Функция C printf и общий формат функции Lispдва таких примера. Оба берут один аргумент, который определяет форматирование вывода и любое количество аргументы, которые предоставляют значения для отформатировать. Вариадические функции могут выявить проблемы безопасности типов в некоторых языки. Например, C printf, если их использовать неосторожно, может привести к класс защитных отверстий, известных как форматирование строк. Атака возможно потому, что поддержка языка для вариационных функций нет типобезопасный; это позволяет функции попытаться извлечь больше аргументов из стек, чем были размещены там - повреждение стека и неожиданное поведение. VARIADIC функциональность может быть рассмотрена дополняющий функцию приложения, которая принимает функцию и list/sequence/array в качестве аргументов и затем вызывает функцию один раз, при этом аргументы являются элементами список.
Один из личных любимых не используемых функций в Java. Это в основном ссылочный массив, который построен из элементов. Один из лучших способов его использования - это конструктор классов или метод, в котором вам нужно постоянно находить значение, например, максимум 2, 3, 4, 5 элементов ввода.
Один пример: когда я создал общий binary tree node
, для задач кодирования я использовал это в конструкторе. Это позволило мне просто добавить элементы в дерево и распространить их.
Следующее создает двоичное дерево типа String, с корнем "Red"
и двумя ветвями "Blue"
и "Green"
.
new MBTN<String>("Red", "Blue", "Green").
Не могли бы вы подумать, какими будут альтернативы: D Вы даже не можете просто создать общий массив элементов, так что это будет растягиваться, как ад. Это определенно не бесполезно.
Ответ 2
Он называется varargs. Этот факт должен обеспечить лучшие результаты Google.
Ответ 3
Они являются "переменными аргументами" или varargs (для краткости).
В основном это позволяет передавать неопределенное количество строк, поэтому подпись метода
public void printStuff(String...messages)
Эффективно может обрабатывать следующие вызовы
printStuff("hi");
printStuff("hi", "bye");
printStuff("Hello", "How are you?", "I'm doing fine.", "See you later");
Вы можете эффективно рассматривать этот тип автобоксинга. Аргумент printStuff
можно рассматривать как массив, поэтому printStuff(String...messages)
концептуально обрабатывается как printStuff(String[] messages)
. Если вызовы выше эффективно действуют как
printStuff(new String[] {"hi"});
printStuff(new String[] {"hi", "bye"});
printStuff(new String[] {"Hello", "How are you?", "I'm doing fine.", "See you later"});
Для доступа к внутренним сообщениям вы используете типичные примитивы обработки List
. Что-то вроде
...
if (messages != null) {
for (String message : messages) {
System.out.println(message);
}
}
...
Нет необходимости создавать массивы - это немного синтаксического сахара, добавленного в Java с появлением автоматического бокса.
Ответ 4
Как упоминал @BalusC, это параметр varags. Это означает, что вы можете передать переменное количество аргументов этому методу.
Итак, для метода, определенного как
public void foo(String...strings) { }
Следующие действия являются законными:
foo();
foo("one param");
foo("one", "two", "three");
Ответ 5
Они являются параметрами переменной длины.
Вот одна ссылка с примером .
Ответ 6
Как упоминалось всеми... переменные аргументы (или varargs) позволяют вам это делать....
//Method we're using for varargs
public void doSomething(String... datas) {
if (datas == null || datas.length == 0) {
System.out.println("We got nothing");
} else {
for (String data: datas) {
System.out.println(data);
}
}
}
Следовательно, все упомянутые ниже вызовы действительны....
String d[] = {"1", "2", "3"};
doSomething(d); //An array of String, as long as the type is exactly as the varargs type.
//OR
doSomething("1", "2", "3", "4"); //I can add "infinitely" many arguments as the JVM can allocate me....
//OR
doSomething("1"); //Exactly 1;
Внутренне varargs является "по существу" ссылочным массивом его объявленного типа.
Ответ 7
Это java-метод, который принял произвольное переменное число параметров
Ответ 8
Это означает "Произвольное число аргументов", то есть вы можете передать неизвестное количество параметров в метод.
см
http://download.oracle.com/javase/tutorial/java/javaOO/arguments.html Найдите раздел "Произвольное число аргументов"
public Polygon polygonFrom(Point... corners) {
int numberOfSides = corners.length;
double squareOfSide1, lengthOfSide1;
squareOfSide1 = (corners[1].x - corners[0].x)*(corners[1].x - corners[0].x)
+ (corners[1].y - corners[0].y)*(corners[1].y - corners[0].y) ;
lengthOfSide1 = Math.sqrt(squareOfSide1);
// more method body code follows that creates
// and returns a polygon connecting the Points
}