Bajo la expresión
“soporte de genéricos” java proporciona dos facilidades de programación
bastante diferentes:
·
tipos
genéricos; que son clases parametrizadas por uno o más tipos que deben ser
facilitados por el programador cuando quiera usar la clase creando objetos
·
métodos
genéricos, que son métodos en los que los argumentos y/o el resultado incluyen
referencias a tipos que no se conocerán hasta que vayamos a usar el método
Probablemente el
principal motivo para el uso de genéricos en java sea la necesidad de disponer
de colecciones homogéneas de objetos (listas, conjuntos, etc. facilitados en el
paquete java.util). Así el ejemplo más habitual del uso de genéricos es la
clase lista genérica, definida como
public interface
List<E>
public class
ArrayList<E> implements List<E>
donde E queda a
definir. Se dice que E es un tipo formal.
En inglés se suele emplear la expresión “type parameter” para
referirse a esos parámetros formales que no se refieren a valores, sino a tipos
de valores. En la traducción al español, “parámetros de tipo” suena muy
extraño, por lo que emplearemos la forma más técnica “tipo formal” indicando
que cuando se vaya a utilizar la clase hay que proporcionar un “tipo real”.
Con esta clase
genérica podemos crear objetos de diferentes tipos
· new ArrayList<String> es una lista de String
·
new
ArrayList<Integer> es una lista de Integer
·
new
ArrayList<Punto> es una lista de objetos de clase Punto
donde todos ellos
se caracterizan por crear listas homogéneas (todos los elementos son del mismo
tipo), resultando programas limpios y, probablemente, con menos errores.
El objetivo de
los genéricos con java es
·
desplazar
a tiempo de compilación los tradicionales errores de ejecución que ocurrían en
programas con fuerte uso de downcasting
·
si el
compilador no se queja, se puede asegurar que no habrá errores de tipo de datos
(casting) en ejecución
“Quejarse” quiere
decir que el compilador protesta como se puede ver en el siguiente ejemplo, al
compilar la clase Queue_Array que se usa un poco más adelante:
$
javac Queue_Array.java Note:
Queue_Array.java uses unchecked or unsafe operations. Note:
Recompile with -Xlint:unchecked for details. jam@toshiba-a10
/c/home/doc/PET/exs/genericos $
javac -Xlint:unchecked Queue_Array.java Queue_Array.java:23:
warning: [unchecked] unchecked cast found : java.lang.Object required:
T T x = (T) data[0]; ^ 1 warning |
Temas relacionados
Vademécum
clases genéricas en el package java.util
creación de clases genéricas
limitaciones de las clases genéricas en java
métodos genéricos
tipos formales acotados