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.
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.
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).
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
Ahora lo he agregado a mi respuesta. –
'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
Creación de una matriz de strings
en línea.
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"};
Creo que un menos detallado (también confuso) declar ation habría sido:
private final String[] okFileExtensions = {"csv"};
Tal vez ... pero la sintaxis 'new
Considere el uso de una enumeración, en lugar de codificar explícitamente las extensiones de archivo. –