Cuando programo para Android, cada vez que uso una AsyncTask, el método doInBackground se ve así.
protected String doInBackground(String... args)
Pero cuando uso los argumentos en cualquier parte de ese bloque, puedo acceder a ellos como una matriz de cadenas normal, por ejemplo, en mi programa
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Lo que funciona bien y no tengo problemas para lidiar con eso. Pero me pregunto por qué usan (String... Args) en lugar de una matriz normal de Strings. ¿Es solo porque en el método de llamada puedes escribir algo como:
new AsyncHandler.execute("argument1","argument2","argument3",...)
en lugar de crear una nueva matriz para pasar los argumentos? Aunque podriamos escribir
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
lo cual es un poco más detallado.
¿Son (String ...) y String [] sinónimos de cómo funcionan, pero el argumento que pasa es más fácil usando el primero porque no hay necesidad de crear una matriz? Por lo que puedo decir, el primero también se traduce a una matriz de cadenas en el fondo, ¿entonces ambos se compilarían en el mismo código y es solo 'azúcar sintáctico'?
(String ...)
significa que puede agregar tantos parámetrosString
como desee,String[]
es un parámetro que es una matriz de cadenas.(String ...)
depende del primer parámetro deAsyncTask
, no siempre es asíString
.String...
como si fueraString[]
String[]
, pero supongamos que fue por defectoString[]
. Hubiera sido un gran problema utilizar diferentesString
parámetros en una matriz. En cambio, dieron una flexibilidad de uso(String ...)
.new String[]{...}
para convertir (que es lo que realmente sucede cuando se utiliza unaString...
)