Este es un tema muy importante en la certificación SCJP, y fue en su momento una de las novedades en Java 5.
Antes de los genéricos las colecciones se creaban de las siguiente manera:
List myList = new ArrayList(); // No se podía declarar un tipo
myList.add(”Fred”); // Podemos ingresar String
myList.add(new Dog()); // Podemos ingresar clases
myList.add(new Integer(42)); // Integers…
Lo que nos dejaba claro que una colección no genérica podía aceptar cualquier tipo de objeto, Una colección por lo tanto podía tener cualquiera que no fuera primitivo.
Sin los genéricos se pueden recuperar los datos de la lista, pero necesitaríamos hacer un cast:
String s = (String) myList.get(0); //Antes de los genericos
Cuando llegaron los genéricos en Java 5 esto se termino, y podemos verlo en el siguiente ejemplo:
List<String> myList = new ArrayList<String>();
myList.add(”Fred”); // Lo acepta debido a que es String
myList.add(new Dog()); // compiler error!! Debido a que no es String
Observado en el código de arriba es simple concluir que al ingresar el tipo de objetos en medio de los < > estamos forzando a la colección a que solo acepte ese tipo de objeto que en el ejemplo fue String.
Hoy que el compilador sabe que solo admite String para recuperar los datos no necesitamos mas que digitar:
String s = myList.get(0);
Debido a que no es necesario un cast ya que en la lista solo existen String.
for (String s : myList) {
int x = s.length();
// No necesita cast antes de llamar al método
// debido a que el compilador sabe que “s” es un String viniendo de MyList
}
Debo aclarar que en este post unicamente se ha realizado una breve introducción, lo recomendable es leer todo el capitulo 6(o del sitio de Sun) donde se habla tanto de colecciones y genéricos.
Ejemplo tomado del libro:
SCJP Sun Certified Programmer for Java 5 Study Guide (Exam 310-055)
Recent Comments