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