При программировании для 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.