El método lastIndexOf() de la interfaz de lista acepta un parámetro que es de tipo Object.¿Por qué el método lastIndexOf() de la interfaz de lista acepta Object como parámetro y no E?
Sin embargo, el método add() acepta un parámetro de tipo E (que es el tipo genérico de la lista que se define en el momento de la creación de una lista) Desde add() sólo acepta E, esto evita que el revelador (o usuario) para agregar cualquier objeto incompatible a la lista en tiempo de compilación en sí.
Ahora, el documento Java dice que lastIndexOf() puede lanzar ClassCastException si el objeto pasado es incompatible. Sin embargo, cuando corro el siguiente código en Eclipse Helios no lo entiendo ninguna excepción: -
package scjp.collection.list;
import java.util.ArrayList;
import java.util.List;
public class LastIndexOf {
public static void main(String[] args) {
List<String> list = new ArrayList<String>();
list.add("some");
list.add("thing");
list.add("at");
list.add("last");
list.add("and");
list.add("at");
list.add("again");
System.out.println(list.lastIndexOf("at"));
System.out.println(list.lastIndexOf(10)); // # 1
System.out.println(list.lastIndexOf(new LastIndexOf())); // # 2
}
}
En línea 1 y línea 2, que han pasado objetos incompatibles a mi lista de los cuales es de tipo String. Sin embargo, la salida que lo que consigo es: -
5
-1
-1
No me sale ClassCastException.
Si el método lastIndexOf() hubiera estado aceptando objetos de tipo E en lugar de objetos de tipo Object, esto se habría evitado solo en tiempo de compilación. ¿Por qué no se hace esto?
Los creadores de Java deben haber pensado algún problema que podría ocurrir si acepta E (y no Object). ¿Qué daño sería?
mira en http://docs.oracle.com/javase/1.5.0/docs/api/index.html. Se menciona claramente que el argumento es un Objeto y ahora se aplica una excepción. – xyz