Ao programar para android, sempre que eu uso uma AsyncTask, o método doInBackground se parece com isso.
protected String doInBackground(String... args)
Mas ao usar os argumentos em qualquer lugar desse bloco, posso acessá-los como uma matriz String normal, por exemplo, no meu programa
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
O que funciona bem e não tenho problemas em lidar com isso. Mas estou me perguntando por que eles usam (String ... args) em vez de uma matriz normal de Strings. É apenas porque no método de chamada você pode escrever algo como:
new AsyncHandler.execute("argument1","argument2","argument3",...)
em vez de criar uma nova matriz para passar os argumentos? Embora pudéssemos escrever
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
o que é um pouco mais detalhado.
(String ...) e String [] são sinônimos de como elas funcionam, mas a passagem de argumentos é mais fácil usando a primeira porque não há necessidade de criar uma matriz? Até onde eu sei, o primeiro também é traduzido para uma matriz de seqüências de caracteres em segundo plano, então ambos compilam o mesmo código e é apenas 'açúcar sintático'?
String...
como se fosseString[]
String[]
, mas vamos assumir que foi por padrão String[]
. Teria sido um problema usar String
parâmetros diferentes em uma matriz. Em vez disso, eles deram uma flexibilidade ao uso (String ...)
.
new String[]{...}
converter (é o que realmente acontece quando você usa um String...
) #
(String ...)
significa que você pode adicionarString
quantos parâmetros desejar,String[]
é um parâmetro que é uma matriz de strings.(String ...)
depende do primeiro parâmetro deAsyncTask
, nem sempre éString
.