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 ...)
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
.String...
tak, jakby to byłString[]
String[]
, ale załóżmy, że było domyślnieString[]
. Użycie innegoString
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 aString...
)Odpowiedzi:
(String ...)
to szereg parametrów, typuString
, w którym wString[]
jest jeden parametr .Teraz tutaj
String[]
można wypełnić ten sam cel tutaj, ale(String ...)
zapewnia większą czytelność i łatwość użytkowania.Zapewnia również opcję, za pomocą której możemy przekazać wiele tablic
String
zamiast jednejString[]
.źródło
String[]
można przekazać do metody przyjmującejString...
jako parametr, dwaString[]
s nie mogą. Nie ma tu żadnej niejawnej konkatenacji macierzy.Cechą String [] vs String ... jest to, że „String ...” nie musi być częścią wywołania.
Wtedy jeśli zadzwonisz
callerTest();
Wyjście będzie:źródło