С точки зрения самого метода (или конструктора, в вашем случае), это просто другой способ написать '[]', и он действителен только для последнего параметра метода. Это означает, что метод получает массив Strings в параметре filenames.
Для тех, кто вызывает этот метод (имеется в виду люди, которые пишут код, вызывающий метод), лучше: они могут выбирать, отдавать ли объект String[]
или любое количество объектов String
(от 0 до сколько ограничение размера метода позволяет), и компилятор затем создает для вас массив с этими объектами.
Итак, при звонке теперь можно написать
... = new ImageLoadingWorker(area, viewer, file1, file2, file3);
и компилятор создает
... = new ImageLoadingWorker(area, viewer, new String[]{file1, file2, file3});
для вас.
(Если есть другой метод, принимающий точное число строк и такие же другие аргументы, он предпочтительнее, чем varargs-one.)
При вызове такого метода (или конструктора) с параметризованным типом, содержащим переменную типа (для параметра varargs), компилятор выдает предупреждение, поскольку он не может действительно создать такой массив, и вместо этого будет использовать массив тип стирания.