2011-02-26 16 views
6

これは非常に簡単な質問に答える必要があります。私は周りを見回し、この構文に関する話題を見つけることができませんでした。そして、 "..."はGoogleでそれを難し​​いものにしています。私は、データベースファイルを、保護されていないAndroid携帯電話の保護された場所から、で閲覧できるようにアクセスできるSDカード上の場所にコピーするための簡単なテストアプリケーションを作成しています。私はこれがラウンドアバウトのようなものだと分かっていますが、エミュレータはネットブックを開くことを拒否していますので、私は自分の携帯電話を使って今開発をテストしています。"final String ... args"という構文は何を意味するのですか?

コードはすでに書かれているので、私はborrowing it from hereであり、それを自分のコードに適合させています。私は前に引数final String... argsを見たことがない

private class ExportDatabaseFileTask extends AsyncTask<String, Void, Boolean> { 
    private final ProgressDialog dialog = new ProgressDialog(ManageData.this); 

    // can use UI thread here 
    protected void onPreExecute() { 
    this.dialog.setMessage("Exporting database..."); 
    this.dialog.show(); 
    } 

    // automatically done on worker thread (separate from UI thread) 
    protected Boolean doInBackground(final String... args) { 

:私は、コードのこの小さなスニペットに遭遇しました。これは何を意味するのですか?

ありがとうございました! Moscro

答えて

11

Javaの引数にある省略記号は、タイプがのvarargを意味します。したがって、あなたのケースでは、...は、任意の数のStringパラメータをdoInBackgroundメソッドに渡すことができることを意味します。

したがって、このメソッドはdoInBackground("String1", "String2", "String3")、またはdoInBackground("String1")またはdoInBackground("String1", "String2", "String3", "String4")または他の形式でも呼び出すことができます。

3つの期間の最終パラメータの型の後にここにhttp://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

を参照してくださいは、最後の引数が配列として、または引数の順序として渡すことができることを示しています。 Varargsは最後の引数の位置でのみ使用できます。 MessageFormat.formatのための新しい可変引数宣言を考えると、上記の呼び出しは、

finalが、それは通常の意味のしている以下の短いと甘い呼び出しに置き換えることができます。ところで、この機能はJava5以降で利用できます。

は、参照してください:上記の2つのリンクが言及http://www.developer.com/java/other/article.php/3323661

として、それは砂糖のアレイが、何もありません。基本的には、myMethod(T... vararg)を定義すると、JavaはmyMethod(T[] vararg)と見なします。 myObj.myMethod(t1, t2, t3, ..., tn)に電話すると、JavaはそれをmyObj.myMethod(new T[]{t1, t2, t3, ..., tn})として渡します。

+0

優秀、ありがとうございました! – moscro

4

finalargsdoInBackgroundに再割り当てできません。 String...は「vararg」です。任意の数のStringオブジェクトをdoInBackgroundメソッドに渡すことができます。

String...は実際にはString[]です。これは文字通りStringの配列であり、そのようにアクセスできます。

関連する問題