2010-01-11 27 views
8
private final String[] okFileExtensions = new String[] { "csv" }; 

¿Alguien podría explicar por qué se escribe {} después de una declaración String array?Extraña declaración de matriz de cadena Sintaxis

Gracias.

+1

Considere el uso de una enumeración, en lugar de codificar explícitamente las extensiones de archivo. –

Respuesta

16

Es una matriz de un elemento. En este caso que contiene el String"csv".

Cuando escrito como parte de una declaración, esto puede escribirse en una forma más concisa:

private final String[] okFileExtensions = { "csv" }; 

arrays de elementos múltiples utilizan comas entre valores. No es necesario que haya ningún valor en absoluto.

private final String[] okFileExtensions = { "csv", "tsv" }; 

private final String[] noFileExtensions = { }; 

Puede valer la pena señalar que, aunque la referencia es definitiva, la matriz no lo es. Por lo tanto se puede escribir:

okFileExtensions[0] = "exe"; 

Una forma de evitar esto es cambiar a colecciones y usar una aplicación inmodificable:

private final Set<String> okFileExtensions = Collections.unmodifiableSet(
    new HashSet<String>(Arrays.asList({ 
     "csv" 
    })); 

JDK8 está destinado a tener mejora a las colecciones que hará esto más concisa . Probablemente List y Set literales dentro del idioma. Posiblemente:

private final Set<String> okFileExtensions = { "csv" }; 

En general, las colecciones deben preferirse a las matrices (para los tipos de referencia).

+2

Si quisiera agregar múltiples valores de extensión de archivo a la matriz, simplemente los separaría con comas, por ejemplo. private final String [] okFileExtensions = {"csv", "txt", "sql"}; – TabbyCool

+0

Ahora lo he agregado a mi respuesta. –

+0

'Las colecciones generalmente deberían preferirse a las matrices (para los tipos de referencia)' que dependen en gran medida del propósito y alcance de la matriz. Como se indica aquí, esto es demasiado general para mi gusto. – rsp

2

Creación de una matriz de strings en línea.

4

Esa es la sintaxis válida de Java para la declaración de matriz.

Es posible utilizar que cuando estás pasando a una matriz sin declaración de una variable:

public void printArray(String [] someArray) { 
     for(String s : someArray) { 
      System.out.println(s); 
     } 
    } 

e invocar así:

printArray(new String [] { "These", "are", "the", "contents"}); 

Las llaves sólo se pueden utilizar cuando se declara la matriz entonces lo siguiente no está permitido:

Stirng [] a; 

a = {"on", "two"}; 
1

Creo que un menos detallado (también confuso) declar ation habría sido:

private final String[] okFileExtensions = {"csv"}; 
+1

Tal vez ... pero la sintaxis 'new [] {...} puede hacer más. –

Cuestiones relacionadas