Lors de la programmation pour Android, chaque fois que j'utilise un AsyncTask, la méthode doInBackground ressemble à ceci.
protected String doInBackground(String... args)
Mais lorsque j'utilise les arguments n'importe où dans ce bloc, je peux y accéder comme un tableau String normal par exemple dans mon programme
@Override
protected String doInBackground(String... args)
{
String details = "";
try
{
details = facade.getRecipeDetails(args[0]);
}
catch(Exception ex)
{
ex.printStackTrace();
}
return details;
}
Ce qui fonctionne bien et je n'ai aucun problème à y faire face. Mais je me demande pourquoi ils utilisent (String ... Args) au lieu d'un tableau normal de Strings. Est-ce simplement parce que dans la méthode d'appel, vous pouvez simplement écrire quelque chose comme:
new AsyncHandler.execute("argument1","argument2","argument3",...)
au lieu de créer un nouveau tableau pour passer les arguments? Bien qu'on puisse écrire
new AsyncHandler().execute(new String[]{"Argument1","Argument2"});
qui est un peu plus verbeux.
Est-ce que (String ...) et String [] sont synonymes dans la façon dont ils fonctionnent, mais le passage d'arguments est simplement plus facile à utiliser avec le premier car il n'est pas nécessaire de créer un tableau? Autant que je sache, la première est également traduite en un tableau de chaînes en arrière-plan, alors est-ce qu'ils compileraient tous les deux dans le même code et c'est juste du «sucre syntaxique»?
String...
comme si c'étaitString[]
String[]
, mais supposons qu'il l'était par défaut String[]
. Il aurait été assez difficile d'utiliser différents String
paramètres dans un tableau. Au lieu de cela, ils ont donné une flexibilité d'utilisation (String ...)
.
new String[]{...}
conversion (c'est ce qui se passe réellement lorsque vous utilisez un String...
)
(String ...)
signifie que vous pouvez ajouter autant de paramètresString
que vous le souhaitez,String[]
est un paramètre qui est un tableau de chaînes.(String ...)
dépend du premier paramètre deAsyncTask
, ce n'est pas toujoursString
.