String [] args vs(String。。。args)


9

Android向けにプログラミングする場合、AsyncTaskを使用すると、doInBackgroundメソッドは次のようになります。

 protected String doInBackground(String... args)

しかし、そのブロックのどこかで引数を使用すると、たとえばプログラムで通常の文字列配列のように引数にアクセスできます

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

これはうまく機能し、私はそれを扱うことに問題はありません。しかし、なぜ通常の文字列配列の代わりに(String。。。args)を使用するのか疑問に思っています。それは、呼び出しメソッドで次のようなものを書くことができるからです:

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

引数を渡す新しい配列を作成する代わりに?書けたけど

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

これはもう少し冗長です。

(String ...)とString []は同じように機能しますが、配列を作成する必要がないため、前者を使用すると引数の受け渡しが簡単になりますか?私が知る限り、前者もバックグラウンドで文字列配列に変換されるので、両方とも同じコードにコンパイルされ、それは単に「構文上の砂糖」にすぎませんか?


(String ...)必要なだけStringパラメータを追加できることを意味しますString[]。これは、文字列の配列である1つのパラメータです。(String ...)の最初のパラメータに依存しますが、AsyncTask常にそうとは限りませんString
FaizanRabbani 2014

@FaizanRabbani(ただし、String...まるでa と呼ぶこともできる)String[]
ラチェットフリーク

@ratchetfreakはい、それはとして機能String[]できますが、デフォルトであると仮定しますString[]String配列で別のパラメーターを使用することはかなり問題でした。代わりに、使用に柔軟性を与えました(String ...)
FaizanRabbani 2014

@FaizanRabbani私はそれが常に文字列ではないことを知っています、それは単なる例です=)。同じことはブール...などにも当てはまりますが、慣れ親しんだmain(String [] args)のため、私はStringを使用するのが好きでした。そして、あなたは「あなたが望むだけ多くの文字列を渡すことができる」と述べました、まああなたは配列でかなりの数の文字列を渡すことができます。私にとっては、配列で同じことを達成できるように思えますが、読みにくく、面倒です。(たとえば、配列の配列を渡すと、読みやすさが少し低下します)。それはそれが主に読みやすさのためであることは正しいですか?(すでにありがとう)
ディラン・メウス14

@FaizanRabbaniよくnew String[]{...}変換するための単純なラップです(実際にを使用すると何が起こるかString...
ラチェットフリーク

回答:


15

(String ...)あるパラメータのアレイタイプのStringような、String[]ある単一のパラメータ

ここで、ここでString[]同じ目的を完全に満たすことができますが、(String ...)読みやすさと使いやすさが向上します。

また、をString使用して単一の配列ではなく複数の配列を渡すことができるオプションも提供しますString[]


1
一方でString[]服用方法に渡すことができるString...パラメータとして、2 String[]秒はできません。ここで行われる暗黙の配列連結はありません。

5

String []とString ...の機能は、「String ...」を呼び出しの一部にする必要がないことです。

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

次にcallerTest();、出力を呼び出すと、次のようになります。

No args defined.

tree

dog
cat
pigeon
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.