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...
)Respuestas:
(String ...)
es una matriz de parámetros de tipoString
, donde comoString[]
es un solo parámetro .Ahora aquí
String[]
puede completar el mismo propósito aquí, pero(String ...)
proporciona más legibilidad y facilidad de uso.También proporciona una opción por la que podemos pasar una matriz múltiple en
String
lugar de una sola usandoString[]
.fuente
String[]
puede pasarse a un método tomandoString...
como parámetro, dosString[]
s no pueden. No hay concatenación de matriz implícita que tenga lugar aquí.Una característica de String [] vs String ... es que el "String ..." no necesita ser parte de la llamada.
Entonces, si llamas a
callerTest();
la salida será:fuente