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 ...)
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
.String...
como se fosseString[]
String[]
, mas vamos assumir que foi por padrãoString[]
. Teria sido um problema usarString
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 umString...
) #Respostas:
(String ...)
é uma matriz de parâmetros do tipoString
, em que asString[]
é um único parâmetro .Agora, aqui, você
String[]
pode preencher o mesmo objetivo aqui, mas(String ...)
fornece mais legibilidade e facilidade de uso.Ele também fornece uma opção pela qual podemos passar várias matrizes, em
String
vez de uma únicaString[]
.fonte
String[]
possa ser passado para um método tomandoString...
como parâmetro, doisString[]
s não podem. Não há concatenação implícita de matriz que ocorre aqui.Um recurso de String [] vs String ... é que a "String ..." não precisa fazer parte da chamada.
Então, se você chamar
callerTest();
a Saída, será:fonte