При программировании для Android, всякий раз, когда я использую AsyncTask, метод doInBackground выглядит следующим образом.
protected String doInBackground(String... args)
Но при использовании аргументов в любом месте этого блока я могу получить к ним доступ, как к обычному массиву String, например, в моей программе
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Что отлично работает, и у меня нет проблем с этим справиться. Но мне интересно, почему они используют (String ... Args) вместо обычного массива Strings. Это просто потому, что в вызывающем методе вы можете просто написать что-то вроде:
new AsyncHandler.execute("argument1","argument2","argument3",...)
вместо создания нового массива для передачи аргументов? Хотя мы могли бы написать
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
что немного более многословно.
Являются ли (String ...) и String [] синонимичными в том, как они работают, но передача аргументов проще с помощью первого, потому что нет необходимости создавать массив? Насколько я могу судить, первый также переводится в массив строк в фоновом режиме, так что они оба будут компилироваться в один и тот же код, и это просто «синтаксический сахар»?
String...
как будто этоString[]
String[]
, но давайте предположим, что это было по умолчанию String[]
. Было бы довольно проблематично использовать другой String
параметр в массиве. Вместо этого они дали гибкость в использовании (String ...)
.
new String[]{...}
конвертировать (это то, что на самом деле происходит, когда вы используете String...
)
(String ...)
означает, что вы можете добавить столькоString
параметров, сколько хотите,String[]
это один параметр, который представляет собой массив строк.(String ...)
зависит от первого параметраAsyncTask
, это не всегдаString
.