Почему Java Java не использует список аргументов переменной длины?
У меня вопрос о синтаксисе объявления Java main
:
public static void main (String[] args)
Поскольку вы можете передавать переменное число строк при вызове основной функции, не следует ли это использовать список аргументов переменной длины, а не массив? Почему вызов командной строки этого метода со списком строковых параметров даже работает? (Если нет обработки за кадром, которая строит массив со списком строк, а затем передает этот массив основному методу...?) Не должно ли главное объявление быть чем-то более похожим на это...? -
public static void main(String... args)
Ответы
Ответ 1
main(String... args)
и main (String[] args)
- это то же самое: то, что вы получаете, это массив String
. Varargs - это просто синтаксический сахар для вызывающего.
Я предполагаю, что, поскольку вы никогда не вызываете main()
из кода, он не был модифицирован при вводе varargs.
Изменить: Собственно, почистите последнее предложение. main(String... args)
- вполне допустимый синтаксис, конечно. Эти два стиля полностью взаимозаменяемы. Это прекрасно работает:
public class Test {
public static void main(String... args) {
System.out.println("Hello World");
}
}
Ответ 2
Вы можете объявить главное в любом случае, и это работает отлично. Проблем "обратной совместимости" или "переоснащения" нет. Тем не менее, читатели вашего кода могут отвлекать внимание, и это вряд ли улучшит вашу программу.
В разделе 8.4.1 в разделе "Язык Java" (третье издание) говорится: "Если последний формальный параметр является параметром переменной arty типа T, считается, что он определяет формальный параметр типа T []".
Спецификация запуска программы Java находится в JLS 12.2, которая ссылается на главу 5 спецификации VM. Раздел VM spec 5.2 говорит, что VM вызывает метод открытого класса "void main(String[])
". Поскольку спецификация VM не имеет понятия переменной arity, основная функция, которая была объявлена с использованием "...
", удовлетворяет требованию.
Ответ 3
Основной метод был разработан для Java 1.0.
Синтаксис "..." был введен в Java 1.5
Он реализован через массив определенного вами типа (моя догадка, но... если коды Java 1.4 и 1.5 байт совместимы, поэтому они должны быть реализованы с массивами).
Ответ 4
Нет основного метода Java, на самом деле вы можете объявить массив как vararg в своем основном методе:
public static void main(String... args) { System.out.println("Hi!"); }
Ответ 5
Основной синтаксис java предшествует varargs, которые были введены только в java 1.5.
Ответ 6
Не должно ли главное объявление быть чем-то более похожим на это??
public static void main(String... args)
Собственно, это можно сделать без проблем.
Это было String [] args
до того, как были введены var args, но в наши дни оба работают.
Ответ 7
Ну, второй синтаксис - это всего лишь вариант 1-го и да, было бы неплохо, но он не был встроен в Java в этот момент
Ответ 8
Почему вас это волнует? Никто не называет главный метод вручную. Он является внутренним для Java.
EDIT: Я думаю, теперь это не имеет значения, поскольку вы можете определить основной метод как:
public static void main(String... args);
Моя точка остается в силе, так как никто не называет main явно.