Como hemos mencionado una colección almacena todos sus elementos como Object, por lo cual a la hora de recuperar dichos elementos debemos efectuar el casting apropiado.
|
1 2 3 |
ArrayList list = new ArrayList(); list.add(0, new Integer(42)); int total = ((Integer) list.get(0).intValue()); |
Utilizar un tipo genérico a la hora de crear la colección nos permite:
- Eliminar la necesidad de casting
- Controlar en tiempo de compilación que todos los elementos son del tipo genérico.
|
1 2 3 |
ArrayList<Integer> list = new ArrayList<Integer>(); list.add(0, new Integer(42)); int total = list.get(0).intValue(); |
Veamos un ejemplo: Creamos una colección y definimos como tipo genérico String, esto nos permite controlar que todos los elementos introducidos en la colección son de tipo String. Si no fuese así e intentásemos introducir instancias de otro tipo se produciría un error de compilación.
Como observamos en el bucle for-each ahora recuperamos todos los elementos como String y no como Object en el caso de no utilizar genéricos.
|
1 2 3 4 5 6 7 8 9 10 11 12 |
Set<String> coleccionSet = new HashSet<>(); coleccionSet.add("uno"); coleccionSet.add("segundo"); // si no es de tipoString genera un error de compilacion // coleccionSet.add(new Integer(4)); // coleccionSet.add(new Float(3.15)); coleccionSet.add("segundo"); // los repetidos no se a??aden System.out.println(coleccionSet); for (String elemento : coleccionSet) System.out.println(elemento); |
Aquí tenemos otro ejemplo de cómo utilizar genéricos con mapas.
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Map<Integer, Double> mapa = new HashMap<>(); mapa.put(new Integer(7), 6.3); mapa.put(9, 7.2); System.out.println("*********************************************"); Object[] miArray = coleccionSet.toArray(); System.out.println(miArray); for(Object o : miArray){ String texto = (String) o; System.out.println(texto.length()); } |
La siguiente tabla recoge como utilizar los tipos genéricos:
