2011-02-26 19 views
6

Esto debería ser una pregunta bastante simple para responder. Miré a mi alrededor y no pude encontrar ningún tema sobre esta sintaxis, y el "..." hace que buscarlo sea difícil en Google. Estoy trabajando en una aplicación de prueba simple para copiar un archivo de base de datos desde su ubicación protegida en un teléfono Android no rooteado a un lugar en la tarjeta SD al que puedo acceder para verlo con el sqlite3 database viewing tool. Sé que esto parece una forma indirecta de hacer las cosas, pero el emulador se niega a abrir en mi netbook, así que estoy usando mi teléfono celular para probar el desarrollo en este momento.¿Qué significa la sintaxis "final String ... args" mean/do?

El código ya se ha escrito, entonces estoy borrowing it from here y lo estoy adaptando a mi código. Me he encontrado con este pequeño fragmento de código:

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

nunca he visto el argumento final String... args antes. ¿Qué significa esto/hacer?

¡Gracias! Moscro

Respuesta

11

Las elipsis en el argumento en Java significa vararg del tipo. Entonces, en su caso, ... significa que puede pasar cualquier número de parámetros de cadena a los métodos doInBackground.

Por lo tanto, puede llamar a este método doInBackground("String1", "String2", "String3") o también doInBackground("String1") o también doInBackground("String1", "String2", "String3", "String4") o cualquier otra forma.

ve aquí http://download.oracle.com/javase/1.5.0/docs/guide/language/varargs.html

Los tres períodos después de tipo del parámetro final indican que el argumento final se puede hacer pasar como una matriz o como una secuencia de argumentos. Varargs solo se puede usar en la posición de argumento final. Dada la nueva declaración de varargs MessageFormat.format, la invocación anterior puede ser sustituida por la siguiente invocación más corto y más dulce

y final tiene su significado habitual. Por cierto, esta característica está disponible en Java5 o más reciente.

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

Como las anteriores dos enlaces menciona, no es nada, pero matriz azucarada. Básicamente, cuando defines myMethod(T... vararg), Java lo ve como myMethod(T[] vararg). Y cuando llamas, myObj.myMethod(t1, t2, t3, ..., tn), Java lo pasa como myObj.myMethod(new T[]{t1, t2, t3, ..., tn}).

+0

Excelente, gracias por la ayuda! – moscro

4

final significa args no se puede reasignar en doInBackground. String... es un "vararg". Puede pasar cualquier número de objetos String al método doInBackground.

La String... es realmente una String[] - literalmente es una matriz de String y se puede acceder como tal.

Cuestiones relacionadas