web-dev-qa-db-fra.com

String [] args vs (String... Args)

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"});

ce qui est un peu plus bavard.

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"?

9
Dylan Meeus

(String ...) est n tableau de paramètres de type String, où comme String[] est n seul paramètre.

Nulle part String[] peut remplir le même objectif ici mais (String ...) offre plus de lisibilité et de facilité d'utilisation.

Il fournit également une option qui nous permet de passer plusieurs tableaux de String plutôt qu'un seul en utilisant String[].

15
FaizanRabbani

Une caractéristique de String [] vs String ... est que le "String ..." n'a pas besoin de faire partie de l'appel.

public void test(String... args){ 
   if(args.length > 0){
      for( String text : args){
         System.out.println(text);
      }
   }else{
      System.out.println("No args defined.");
   }
}

public void callerTest(){
     test();
     System.out.println();

     test("tree");
     System.out.println();

     test("dog", "cat", "pigeon");
}

Ensuite, si vous appelez callerTest(); la sortie sera:

No args defined.

tree

dog
cat
pigeon
5
GetBackerZ