Skip to content

10.1 Introducción a los Genéricos

1. Introducción

Se trata de la implementación en Java de una de las opciones de C++ más añoradas por los programadores que proceden de ese lenguaje; las plantillas (templates). Son similares a las plantillas de C++. Sirven para evitar conversiones de clases.

Uno de los motivos de la creación de los genéricos fueron las colecciones. Sin los genéricos todas las colecciones serían de tipo Object, lo que tendría una serie de desventajas:

  • Nada impide crear listas heterogéneas de objetos. Eso causa problemas evidentes de casting, además de imposible incoherencias.
  • Si se desea acceder a propiedades específicas de otro tipo de clases, será necesario realizar una cantidad grande de conversiones en el código, lo que hará que sea más pesado de comprender.
  • Los métodos de las clases e interfaces de las colecciones no se adaptan al tipo de datos que contienen dificultando su uso.

Por ello aparecieron los tipos genéricos en la versión 1.5 de Java consiguiendo solucionar los problemas anteriores en las colecciones.

2. Idea general de los genéricos

Los genéricos permiten crear clases y métodos en los que los tipos de datos (las clases) sobre los que actúan son un parámetro más. Gracias a ello se pueden crear clases y métodos que se adaptan a distintos tipos de datos de forma automática.

Anteriormente a la aparición de los genéricos el que las clases y métodos se adaptaran automáticamente pasaba por especificar parámetros de tipo Object, ya que las referencias de tipo Object valen para cualquier otro tipo de objeto.

El problema es que la coherencia no está asegurada con los tipos Object, la sintaxis del lenguaje puede provocar excepciones de tipo ClassCastException ante conversiones erróneas de Object a otro tipo de datos.

La idea es:

  1. El programar declara un genérico en un método de clase, por ejemplo T
  2. Cuando se utilice dicha clase o método se indicará un tipo concreto, entonces se cambia el genérico para que se refiera a ese tipo concreto.