2011-02-26 21 views
6

Questa dovrebbe essere una domanda abbastanza semplice a cui rispondere. Mi sono guardato intorno e non ho trovato argomenti su questa sintassi, e il "..." rende difficile la ricerca su Google. Sto lavorando a una semplice applicazione di test per copiare un file di database dalla sua posizione protetta su un telefono Android non-root in una posizione sulla scheda SD a cui posso accedere per la visualizzazione con lo sqlite3 database viewing tool. So che questo sembra un modo indiretto di fare le cose, ma l'emulatore si rifiuta di aprire sul mio netbook, quindi sto usando il mio cellulare per testare lo sviluppo per ora.Che cosa significa la sintassi "final String ... args" significa/do?

Il codice è già stato scritto, quindi sono borrowing it from here e lo si adatta al mio codice. Ho incontrato questo piccolo frammento di codice:

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

Non ho mai visto l'argomento final String... args prima. Cosa significa questo/fare?

Grazie! Moscro

risposta

11

Le ellissi nell'argomento in Java indicano vararg del tipo. Quindi, nel tuo caso, ... significa che puoi passare qualsiasi numero di parametri String ai metodi doInBackground.

Quindi, è possibile chiamare questo metodo doInBackground("String1", "String2", "String3") oppure doInBackground("String1") o anche doInBackground("String1", "String2", "String3", "String4") o qualsiasi altro modulo.

Vedi qui http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

I tre periodi dopo il tipo di parametro finale indicano che l'argomento finale può essere passato come una matrice o come una sequenza di argomenti. Varargs può essere utilizzato solo nella posizione dell'argomento finale. Data la nuova dichiarazione varargs per MessageFormat.format, il comando sopra può essere sostituita dalla seguente invocazione più corto e più dolce

e final ha il suo significato usuale. A proposito, questa funzione è disponibile in Java5 o versioni successive.

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

Come questi due collegamenti menzioni, non è niente, ma di matrice zuccherata. Fondamentalmente, quando si definisce myMethod(T... vararg), Java lo vede come myMethod(T[] vararg). E quando chiami, myObj.myMethod(t1, t2, t3, ..., tn), Java lo passa come myObj.myMethod(new T[]{t1, t2, t3, ..., tn}).

+0

Eccellente, grazie per l'aiuto tutto! – moscro

4

final significa args non può essere riassegnato in doInBackground. String... è un "vararg". È possibile passare qualsiasi numero di oggetti String al metodo doInBackground.

Il String... è in realtà un String[] - letteralmente è un array di String e si può accedere come tale.

Problemi correlati