Podczas programowania dla Androida za każdym razem, gdy używam AsyncTask, metoda doInBackground wygląda następująco.
protected String doInBackground(String... args)
Ale gdy używam argumentów w dowolnym miejscu tego bloku, mogę uzyskać do nich dostęp jak normalną tablicę String, na przykład w moim programie
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Które działa dobrze i nie mam problemu z tym. Ale zastanawiam się, dlaczego używają (String.… Args) zamiast zwykłej tablicy ciągów. Czy tylko dlatego, że w metodzie wywoływania możesz po prostu napisać coś takiego:
new AsyncHandler.execute("argument1","argument2","argument3",...)
zamiast tworzyć nową tablicę do przekazywania argumentów? Chociaż moglibyśmy pisać
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
co jest nieco bardziej szczegółowe.
Czy (String ...) i String [] są synonimami w tym, jak działają, ale przekazywanie argumentów jest po prostu łatwiejsze przy użyciu tego pierwszego, ponieważ nie ma potrzeby tworzenia tablicy? O ile mogę stwierdzić, pierwsza z nich jest również tłumaczona na tablicę łańcuchów w tle, więc czy obie kompilowałyby się do tego samego kodu, a to po prostu „cukier składniowy”?
String...
tak, jakby to byłString[]
String[]
, ale załóżmy, że było domyślnie String[]
. Użycie innego String
parametru w tablicy byłoby dużym problemem . Zamiast tego dali elastyczność użytkowania (String ...)
.
new String[]{...}
do konwersji (tak naprawdę dzieje się, gdy używasz a String...
)
(String ...)
oznacza, że możesz dodać tyleString
parametrów, ile chcesz,String[]
to jeden parametr, który jest tablicą ciągów.(String ...)
zależy od pierwszego parametruAsyncTask
, nie zawsze jestString
.