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 ...)
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
.String...
comme si c'étaitString[]
String[]
, mais supposons qu'il l'était par défautString[]
. Il aurait été assez difficile d'utiliser différentsString
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 unString...
)Réponses:
(String ...)
est un tableau de paramètres de typeString
, où asString[]
est un paramètre unique .Maintenant, ici, vous
String[]
pouvez remplir le même objectif ici, mais cela(String ...)
offre plus de lisibilité et de facilité d'utilisation.Il fournit également une option que nous pouvons transmettre plusieurs tableaux au
String
lieu d'un seul à l'aideString[]
.la source
String[]
peut être passé dans une méthode prenantString...
comme paramètre, deuxString[]
s ne le peuvent pas. Il n'y a aucune concaténation de tableau implicite qui a lieu ici.Une caractéristique de String [] vs String ... est que le "String ..." n'a pas besoin de faire partie de l'appel.
Ensuite, si vous appelez
callerTest();
la sortie sera:la source