Я преобразовал кодовую базу Groovy в Java и забыл изменить
public static void main(String... args) {
к
public static void main(String args[]) {
и скомпилировал и запускал проект все это время только для того, чтобы удивляться только теперь, когда это законный код Java 8.
Я понимаю, что Java 8 Varargs позволяет функции иметь произвольное количество аргументов, "уплотняя их в массив" в зависимости от на их позиции по вызову метода.
Но способ, которым функции с String... args
и String[] args
называются синтаксически по-разному:
void function1 (String[] args) {}
function1({"one", "two", "three"});
void function2 (String... args) {}
function2("one", "two", "three");
Итак, как String... args
является законным как String args[]
при захвате параметров из терминала?
Edit:
azurefrog связал ответ на другой вопрос, который велик. Я хотел упомянуть еще один ответ, где комментарии дают ответ, который я искал:
Почему в Java не используется список аргументов переменной длины?
Комментарий 1: Интересно. Судя по другим ответам/комментариям, я предполагаю, что этот новый синтаксис основной декларации был добавлен с помощью Java 1.5. Таким образом, среда выполнения Java определяет, основываясь на объявлении основного метода, передать ли строки непосредственно основному или построить массив в первую очередь?
Комментарий 2: Нет, он всегда создает массив. String... args == String[]
args, что касается вызываемого метода. Параметр - это массив в любом случае
Это вопрос, который у меня был. Извините, если его спросили плохо.