2009-11-03 22 views
91

la documentación de Java para el método
String[] java.io.File.list(FilenameFilter filter)
incluye esto en la descripción rendimientos:¿Cómo puedo inicializar una matriz de cadenas con longitud 0 en Java?

La matriz estará vacía si el directorio está vacío o si no hay nombres fueron aceptados por el filtro.

¿Cómo hago algo similar e inicializo una matriz de cadenas (o cualquier otra matriz para el caso) para tener una longitud 0?

+6

me he dado cuenta de que esto es una pregunta estúpida :(A medida que estas matrices se inicializan exactamente de la misma manera que cualquier otra matriz tal y con un tamaño 0. muestra la frecuencia con que inicializar arrays de hoy en día. Voy a dejar la cuestión (no eliminarlo) porque algún día alguien más podría ser tan estúpido como lo fui hace un momento :) –

Respuesta

160

Como han dicho otros,

new String[0] 

será de hecho crear una matriz vacía. Sin embargo, hay algo bueno acerca de las matrices: su tamaño no puede cambiar, por lo que siempre puede usar la misma referencia de matriz vacía. Así que en su código, puede utilizar:

private static final String[] EMPTY_ARRAY = new String[0]; 

y luego simplemente volver EMPTY_ARRAY cada vez que lo necesite - no hay necesidad de crear un nuevo objeto cada vez.

+6

Parece que a todo el mundo le gusta escribir: 'private static final String [] EMPTY_ARRAY = {};' –

+7

@Thomas: Entiendo tu punto, pero en este caso particular prefiero la forma más explícita. Es más claro para mí que significa "Quiero una matriz de cadenas con 0 elementos" en lugar de "Quiero una matriz con este contenido, que está vacío". Solo preferencias personales, supongo. –

+1

@Tony - Tengo que usar los pocos lugares donde Java puede inferir un tipo. :-) –

9

Ok De hecho, me encontré la respuesta, pero pensaba que iba a 'importar' en la pregunta de todos modos

String[] files = new String[0];
o
int[] files = new int[0];

+0

Agregue esos comentarios a su pregunta ... o seleccione una de las respuestas que dice lo mismo. –

+4

Gracias por el comentario Jonathan. Como habrás notado, publiqué esta respuesta antes que nadie (y como tal, no hubo respuestas para seleccionar). Tampoco veo cómo agregar la respuesta a la pregunta sea una mejor pregunta. –

18

String[] str = new String[0];?

14
String[] str = {}; 

Pero

return {}; 

no funcionará como la información de tipo no se encuentra.

+9

'return new String [] {};' y 'return new String [0];' funcionarían ambos. – Bombe

0

Realice una función que no devolverá nulo, sino que devolverá una matriz vacía que puede examinar a continuación para entender.

public static String[] getJavaFileNameList(File inputDir) { 
    String[] files = inputDir.list(new FilenameFilter() { 
     @Override 
     public boolean accept(File current, String name) { 
      return new File(current, name).isFile() && (name.endsWith("java")); 
     } 
    }); 

    return files == null ? new String[0] : files; 
} 
Cuestiones relacionadas