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?
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?
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.
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
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). –
Estoy usando ArrayList simple. Pero pensé que los genéricos se introdujeron para reducir este tipo de errores. – cmn