String [] args vs (Dize.. Args)


9

Android için programlama yaparken, bir AsyncTask kullandığımda doInBackground yöntemi böyle görünüyor.

 protected String doInBackground(String... args)

Ama bu blokta herhangi bir yerde argüman kullanırken onlara normal bir String dizisi gibi erişebilirim, örneğin programımda

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

Hangi iyi çalışıyor ve onunla ilgili hiçbir sorunum yok. Ama neden normal bir Dizeler dizisi yerine (String... Args) kullandıklarını merak ediyorum. Sadece arama yönteminde sadece şöyle bir şey yazabilirsiniz çünkü:

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

argümanları iletmek için yeni bir dizi oluşturmak yerine? Yazabilmemize rağmen

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

ki bu biraz daha ayrıntılı.

(String ...) ve String [] nasıl çalışırlar? Anlayabildiğim kadarıyla, eski de arka planda bir dize dizisine çevrilir böylece her ikisi de aynı kodu derlemek ve sadece 'sözdizimsel şeker' mi?


(String ...)Stringistediğiniz kadar param ekleyebileceğiniz anlamına gelir String[], dizelerden oluşan bir parametredir. (String ...)ilk parametresine bağlıdır AsyncTask, her zaman değildir String.
FaizanRabbani

@FaizanRabbani String..., sanki bir de sankiString[]
cırcır ucube

@ratchetfreak Evet, bir işlevi görebilir String[], ancak varsayılan olarak olduğunu varsayalım String[]. StringBir dizide farklı param kullanmak oldukça sorun olurdu . Bunun yerine kullanım esnekliği verdiler (String ...).
FaizanRabbani

@FaizanRabbani Her zaman String olmadığını biliyorum, bu sadece bir örnek =). Boolean ... ya da başka şeyler için de aynı şey geçerli, ancak aşina olduğumuz ana (String [] args) nedeniyle String'i kullanmayı sevdim. Ve 'istediğiniz kadar dizeyi geçebilirsiniz' dediniz, bir dizi ile oldukça az sayıda dizeyi geçebilirsiniz. Bana göre yine de dizilerle aynı şeyi başarabilirsiniz, ancak daha az okunabilir ve daha fazla güçlük çekiyor. (Örneğin bir dizi diziyi geçmek, okunabilirliği biraz azaltacaktır). O zaman esas olarak okunabilirlik için doğru mu? (teşekkürler zaten btw)
Dylan Meeus

@FaizanRabbani iyi new String[]{...}dönüştürmek için basit bir sargı ( a kullandığınızda aslında ne olur String...)
cırcır ucube

Yanıtlar:


15

(String ...)olan parametreleri bir dizi Çeşidi Stringgibi String[]olan tek bir parametre .

Şimdi burada String[]aynı amacı tam olarak doldurabilir, ancak (String ...)daha fazla okunabilirlik ve kullanım kolaylığı sağlar.

Ayrıca Stringtek bir yerine birden fazla dizi geçirebileceğimiz bir seçenek sunar String[].


1
Birlikte String[]bir yöntem olup alma içine geçirilebilir String...bir parametre olarak, iki String[]s olmaz. Burada gerçekleşen hiçbir örtülü dizi birleştirmesi yoktur.

5

String [] ve String ... 'in bir özelliği, “String ...” çağrısının bir parçası olması gerekmemesidir.

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

O zaman callerTest();Çıkış ararsanız :

No args defined.

tree

dog
cat
pigeon
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.