2009-06-24 13 views
26

Por ejemplo podemos construir una matriz tal como esto:El uso de matriz de longitud cero

new ElementType[0]; 

he visto una construcción de este tipo, pero no entiendo por qué esto podría ser útil.

+0

Por favor, edite su pregunta para aclarar. – Nippysaurus

Respuesta

43

Un ejemplo. Supongamos que tiene una función

public String[] getFileNames(String criteria) { 

para obtener algunos nombres de archivos. Imagine que no encuentra ningún nombre de archivo que satisfaga los criterios. ¿Qué devuelves? Tiene 2 opciones: , cualquiera devuelva nulo o 0-sized array.

La variante con 0 de tamaño gama es mejor, porque la persona que llama no necesita comprobar si hay NULL y puede procesar la matriz de una manera constante - por ejemplo, en un bucle (que sería vacía en este caso).

Hay un capítulo sobre esto en Effective Java, Item 27

+0

Para estar seguro: si el código está destinado a ser utilizado en "capas inferiores", 'null' es mucho más eficaz. También vea el 3er párrafo de https://code.google.com/p/guava-libraries/wiki/UsingAndAvoidingNullExplained – Pacerier

15

En muchos casos es más fácil trabajar con null, donde null es la alternativa obvia.

suponga que desea devolver un Iterable<String> que contiene (por ejemplo) una lista de nombres de archivos pertinentes ... pero no hay ninguna por alguna razón. Usted podría devolver null para indicar eso, pero luego la persona que llama debe tener un caso especial. En cambio, si devuelve una colección vacía, el llamante puede todavía utilizar un bucle for mejorado:

for (String file : getFiles()) 

Así que ¿por qué utilizar una matriz vacía en lugar de un vacío ArrayList o algo similar? Las matrices tienen un tamaño fijo, por lo que una matriz vacía es efectivamente inmutable. Eso significa que puede mantener un valor único y devolverlo a quien quiera, sabiendo que no puede hacer nada con él. Eso puede ser muy útil en algunas situaciones.

4

es un reemplazo para nula, ya que no es necesario para comprobar nula antes de usarlo. Más formalmente es un caso especial de special case design pattern (consulte también Objeto nulo).

Otro uso idiomático es colecciones toArray:

List<String> list = new ... ; 
// fill the list 
String[] array = list.toArray(new String[0]); 
+0

Tenga en cuenta que en el segundo caso, cualquier 'String []' funcionaría igual de bien; solo necesita una instancia del tipo al que desea convertirla. –

Cuestiones relacionadas