Оператор Java ... - PullRequest
       21

Оператор Java ...

6 голосов
/ 14 февраля 2011

В Filthy Rich Clients этот код представлен:

<code>
public ImageLoadingWorker(JTextArea log, JPanel viewer, String... filenames) {}

Что именно ... значит?

Ответы [ 5 ]

17 голосов
/ 14 февраля 2011

Используется для переменных аргументов .

4 голосов
/ 14 февраля 2011

Это означает, что вы можете передать любое количество значений для filenames, например, "foo", "bar", "car", "bus" и т. Д. Он называется varargs.Для дальнейшего объяснения действительны оба указанных ниже вызова:

ImageLoadingWorker(log, viewer, "foo", "bar")

ImageLoadingWorker(log, viewer, "foo", "bar", "car", "bus")
4 голосов
/ 14 февраля 2011

Это означает, что все параметры, переданные в ImageLoadingWorker, начиная с третьего, могут быть доступны с помощью массива String с именем filenames.

3 голосов
/ 14 февраля 2011

С точки зрения самого метода (или конструктора, в вашем случае), это просто другой способ написать '[]', и он действителен только для последнего параметра метода. Это означает, что метод получает массив Strings в параметре filenames.

Для тех, кто вызывает этот метод (имеется в виду люди, которые пишут код, вызывающий метод), лучше: они могут выбирать, отдавать ли объект String[] или любое количество объектов String (от 0 до сколько ограничение размера метода позволяет), и компилятор затем создает для вас массив с этими объектами.

Итак, при звонке теперь можно написать

 ... = new ImageLoadingWorker(area, viewer, file1, file2, file3);

и компилятор создает

 ... = new ImageLoadingWorker(area, viewer, new String[]{file1, file2, file3});

для вас.

(Если есть другой метод, принимающий точное число строк и такие же другие аргументы, он предпочтительнее, чем varargs-one.)

При вызове такого метода (или конструктора) с параметризованным типом, содержащим переменную типа (для параметра varargs), компилятор выдает предупреждение, поскольку он не может действительно создать такой массив, и вместо этого будет использовать массив тип стирания.

3 голосов
/ 14 февраля 2011

это varargs, новый в Java 5. Это означает, что вы можете иметь столько имен файлов, сколько захотите в вызове метода.

...