Під час програмування для 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[]{...}конвертувати конверсію (це те, що відбувається насправді, коли ви використовуєте a String...)
(String ...)означає, що ви можете додати стількиStringпарам, скільки хочете,String[]це один параметр, який є масивом рядків.(String ...)Залежить від першого парамумуAsyncTask, це не завждиString.