String [] args vs (String. args)

5

Durante la programmazione per Android, ogni volta che utilizzo un AsyncTask il metodo doInBackground appare come questo.

 protected String doInBackground(String... args)

Ma quando uso gli argomenti ovunque in quel blocco posso accedervi come un normale array di String, ad esempio nel mio programma

        @Override
    protected String doInBackground(String... args)
    {
        String details = "";
        try
        {
            details = facade.getRecipeDetails(args[0]);
        }
        catch(Exception ex)
        {
            ex.printStackTrace();
        }
        return details;
    }

Che funziona bene e non ho alcun problema a risolverlo. Ma mi chiedo perché usano (String. Args) invece di una normale serie di stringhe. È solo perché nel metodo di chiamata puoi semplicemente scrivere qualcosa come:

 new AsyncHandler.execute("argument1","argument2","argument3",...)  

invece di creare un nuovo array per passare gli argomenti? Anche se potremmo scrivere

new AsyncHandler().execute(new String[]{"Argument1","Argument2"});

che è un po 'più prolisso.

Sono (String ...) e String [] anche nel modo in cui funzionano, ma l'argomento che passa è più semplice usare il primo perché non è necessario creare un array? Per quanto ne so, il primo viene anche tradotto in una matrice di stringhe in background, quindi entrambi compilano lo stesso codice ed è solo "zucchero sintattico"?

    
posta Dylan Meeus 28.12.2014 - 19:07
fonte

2 risposte

12

(String ...) è un array di parametri di tipo String , dove String[] è un singolo parametro .

Ora qui String[] può riempire completamente lo stesso scopo qui, ma (String ...) offre più leggibilità e facilità d'uso.

Fornisce anche un'opzione che possiamo passare più array di String piuttosto che uno singolo usando String[] .

    
risposta data 28.12.2014 - 19:38
fonte
3

Una funzionalità di String [] vs String ... è che "String ..." non ha bisogno di essere parte della chiamata.

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

Quindi se chiami callerTest(); l'Output sarà:

No args defined.

tree

dog
cat
pigeon
    
risposta data 11.04.2018 - 19:39
fonte

Leggi altre domande sui tag