Genéricos en Java


Los genéricos son una función de programación genérica que se agregaron al lenguaje de programación Java en 2004 dentro de la versión J2SE 5.0. Fueron diseñados para extender el sistema de tipos de Java para permitir que "un tipo o método opere en objetos de varios tipos mientras proporciona seguridad de tipos en tiempo de compilación". [1] El aspecto seguridad de tipo en tiempo de compilación no se logró en su totalidad, ya que se demostró en 2016 que no está garantizado en todos los casos. [2]

El marco de trabajo de colecciones de Java admite genéricos para especificar el tipo de objetos almacenados en una instancia de colección.

En 1998, Gilad Bracha , Martin Odersky , David Stoutamire y Philip Wadler crearon Generic Java, una extensión del lenguaje Java para admitir tipos genéricos. [3] Java genérico se incorporó en Java con la adición de comodines.

El siguiente bloque de código Java ilustra un problema que existe cuando no se utilizan genéricos. Primero, declara un ArrayListtipo de Object. Luego, agrega un Stringal ArrayList. Finalmente, intenta recuperar el agregado Stringy convertirlo en un Integer—un error de lógica, ya que generalmente no es posible convertir una cadena arbitraria a un entero.

Aunque el código se compila sin errores, arroja una excepción de tiempo de ejecución ( java.lang.ClassCastException) al ejecutar la tercera línea de código. Este tipo de error lógico se puede detectar durante el tiempo de compilación mediante el uso de genéricos y es la principal motivación para usarlos.

El parámetro de tipo Stringdentro de los corchetes angulares declara ArrayListque está constituido por String(un descendiente de los constituyentes ArrayListgenéricos de ' Object). Con genéricos, ya no es necesario convertir la tercera línea a ningún tipo en particular, porque el resultado de v.get(0)está definido Stringpor el código generado por el compilador.