2012-09-12 7 views
7

La pregunta lo dice todo ..de la Lista está en carne viva

a partir del código de lista:

método Add: public boolean add(E e) { ... }

Mientras, retirar método: public boolean remove(Object o) { .. }

¿Hay alguna razón específica para esto?

Respuesta

7

De the javadoc:

Si esta lista no contiene el elemento, que es sin cambios

por lo que añadir una restricción de tipo aquí sería simplemente inútil, mientras que la restricción en add asegura al compilar vez que la lista contiene lo que está escrito en la caja.

Tenga en cuenta que hay una cierta libertad para la aplicación como se permite que el método para lanzar una ClassCastException

si el tipo de elemento especificado es incompatible con esta lista (opcional)

El La implementación de ArrayList no arroja esta excepción:

439 public boolean remove(Object o) { 
440   if (o == null) { 
441    for (int index = 0; index < size; index++) 
442     if (elementData[index] == null) { 
443      fastRemove(index); 
444      return true; 
445     } 
446   } else { 
447    for (int index = 0; index < size; index++) 
448     if (o.equals(elementData[index])) { 
449      fastRemove(index); 
450      return true; 
451     } 
452   } 
453   return false; 
454  } 

Esto significa que no tiene para verificar la clase de objetos sin procesar antes de realizar la operación de eliminación.

+0

Pero esto no dará ningún error de tiempo de compilación si invocamos esto con el tipo incorrecto. Lo que estaba haciendo era eliminar un elemento si alguna matriz lo contiene. En lugar de hacer 'list.remove (array [i])', hice 'list.remove (array)' que descubrí durante el tiempo de ejecución. – cmn

+0

Según la implementación de su lista, podría ser totalmente legal intentar eliminar un objeto del tipo incorrecto. Esto es "por diseño" y a veces es útil (si tiene objetos en bruto para "eliminar", significa que no tiene que verificar su clase antes de realizar la operación de eliminación). –

+0

Estoy usando ArrayList simple. Pero pensé que los genéricos se introdujeron para reducir este tipo de errores. – cmn

Cuestiones relacionadas