2011-02-26 90 views
6

這應該是一個相當簡單的問題來回答。我環顧四周,找不到任何有關此語法的主題,並且「...」在Google上搜索它很困難。我正在研究一個簡單的測試應用程序,用於將數據庫文件從未受保護的Android手機上的受保護位置複製到SD卡上的一個位置,我可以通過該位置查看sqlite3 database viewing tool。我知道這似乎是一種迂迴的做事方式,但模擬器拒絕在我的上網本上打開,所以我現在用我的手機來測試開發。語法「final String ... args」是什麼意思/做什麼?

該代碼已被寫入,所以我borrowing it from here並適應它到我的代碼。我遇到的這個代碼小片段:

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) { 

我從來沒有見過的說法final String... args之前。這意味着什麼?

謝謝! Moscro

回答

11

Java中參數的省略號意味着變量類型。所以,在你的情況下,...意味着你可以傳遞任意數量的String參數給doInBackground方法。

所以,你可以調用這個方法doInBackground("String1", "String2", "String3")doInBackground("String1")doInBackground("String1", "String2", "String3", "String4")或任何其他形式。

這裏參見http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

最終參數的類型後的三個時期表明最後一個參數可以作爲陣列或者作爲參數的序列進行傳遞。可變參數只能在最後的參數位置使用。鑑於MessageFormat.format新的可變參數的聲明,上面的調用可以通過以下短,甜調用

final有它的通常含義進行更換。順便說一句,這個特性在Java5或更新版本中可用。

參見: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 2011-02-26 05:27:29

4

final意味着args不能被重新分配在doInBackgroundString...是「vararg」。您可以將任意數量的String對象傳遞給doInBackground方法。

String...確實是String[] - 它實際上是一個String的數組,可以像這樣訪問。