2011-02-26 20 views
6

To powinno być dość proste pytanie. Rozejrzałem się i nie mogłem znaleźć żadnych tematów na temat tej składni, a "..." utrudnia wyszukiwanie w Google. Pracuję nad prostą aplikacją testową do kopiowania pliku bazy danych z jego chronionej lokalizacji na niezrootowanym telefonie z systemem Android do miejsca na karcie SD, do którego mogę uzyskać dostęp za pomocą sqlite3 database viewing tool. Wiem, że wydaje się to okrężnym sposobem robienia rzeczy, ale emulator odmawia otwarcia na moim netbooku, więc używam mojego telefonu komórkowego, aby przetestować program na teraz.Co oznacza składnia "final String ... args"?

Kod został już napisany, więc jestem borrowing it from here i dostosowuję go do mojego kodu. Natknąłem tym małym fragmencie kodu:

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

Nigdy nie widziałem argument final String... args wcześniej. Co to znaczy/robi?

Dziękujemy! Moscro

Odpowiedz

11

Elipsy w argumencie w języku Java oznaczają vararg typu. Tak więc w twoim przypadku ... oznacza, że ​​możesz przekazać dowolną liczbę parametrów String do metod doInBackground.

Możesz więc wywołać tę metodę: doInBackground("String1", "String2", "String3") lub też doInBackground("String1") lub też doInBackground("String1", "String2", "String3", "String4") lub dowolny inny formularz.

Zobacz tutaj http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

trzech okresów po wpisać parametr końcowy wskazują, że ostatni argument może być przekazany jako tablica lub jako ciąg argumentów. Varargs może być używany tylko w końcowej pozycji argumentu. Biorąc pod uwagę nową deklarację varargs dla MessageFormat.format, powyższe wezwanie może zostać zastąpiony przez następujący krótszy i słodszy inwokacji

i final ma swoje zwykłe znaczenie. BTW, ta funkcja jest dostępna w Java5 lub nowszym.

Patrz: http://www.developer.com/java/other/article.php/3323661

Jak powyższe dwa linki wspomina, że ​​to nic ale cukrem tablicy. Zasadniczo, gdy definiujesz myMethod(T... vararg), Java widzi to jako myMethod(T[] vararg). A kiedy zadzwonisz, myObj.myMethod(t1, t2, t3, ..., tn), Java przekazuje go jako myObj.myMethod(new T[]{t1, t2, t3, ..., tn}).

+0

Doskonale, dziękuję za pomoc! – moscro

4

final oznacza args nie może być ponownie przypisany w doInBackground. String... to "vararg." Możesz przekazać dowolną liczbę obiektów String do metody doInBackground.

Model String... to naprawdę String[] - dosłownie jest to zestaw String i można do niego uzyskać dostęp.