разность fn (String … args) vs fn (String args)
Этот синтаксис полезен для:
function(String... args)
Это то же самое, что писать
function(String[] args)
с разницей только при вызове этого метода или существует ли какая-либо другая функция?
- Java, 3 точки в параметрах
- Потенциальное загрязнение кучи по параметру varargs
- Неоднозначные методы варгара
- Как передать переменное количество аргументов printf / sprintf
- Вызов метода Java varargs с единственным аргументом null?
- Есть ли getchas с использованием varargs со ссылочными параметрами
- Какой смысл перегружать методы фабрики удобство для коллекций в Java 9
- Какие объявления по умолчанию для типов существуют в списке вариационных аргументов?
- Как определить применение Lisp в Haskell?
- Как передать ArrayList параметру метода varargs?
- Java «params» в подписи метода?
- Почему printf () продвигает float в double?
- trailing return type с использованием метода decltype с функцией вариационного шаблона
Единственное различие между ними – это то, как вы вызываете функцию. С помощью String var args вы можете опустить создание массива.
public static void main(String[] args) { callMe1(new String[] {"a", "b", "c"}); callMe2("a", "b", "c"); // You can also do this // callMe2(new String[] {"a", "b", "c"}); } public static void callMe1(String[] args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } public static void callMe2(String... args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } }
Разница заключается только при вызове метода. Вторая форма должна быть вызвана с помощью массива, первая форма может быть вызвана с помощью массива (как и вторая, да, это допустимо в соответствии со стандартом Java) или со списком строк (несколько строк, разделенных запятой) или без каких-либо аргументов (второй всегда должен иметь один, по крайней мере, нуль должен быть передан).
Это синтаксически сахар. Фактически компилятор поворачивается
function(s1, s2, s3);
в
function(new String[] { s1, s2, s3 });
внутренне.
с varargs ( String...
) вы можете вызвать метод следующим образом:
function(arg1); function(arg1, arg2); function(arg1, arg2, arg3);
Вы не можете сделать это с помощью массива ( String[]
)
Вы вызываете первую функцию как:
function(arg1, arg2, arg3);
а второй:
String [] args = new String[3]; args[0] = ""; args[1] = ""; args[2] = ""; function(args);
На размер приемника вы получите массив String. Разница только на вызывающей стороне.
class StringArray1 { public static void main(String[] args) { callMe1(new String[] {"a", "b", "c"}); callMe2(1,"a", "b", "c"); callMe2(2); // You can also do this // callMe2(3, new String[] {"a", "b", "c"}); } public static void callMe1(String[] args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } public static void callMe2(int i,String... args) { System.out.println(args.getClass() == String[].class); for (String s : args) { System.out.println(s); } } }