Hoy vamos a ver cómo usar los tipos genéricos en Java. Es algo interesante, ya que nos va a permitir escribir funciones que trabajen cualquier tipo, dará igual si pasamos enteros, cadenas, decimales, etc. Java también nos permitirá crear clases genéricas, no solo funciones.
Vamos a ver un par de ejemplos, primero una clase genérica y por último una función, los ejemplos son bastante sencillos para que sean más fáciles de comprender.
1. Clase genérica en Java
Lo primero que veremos es el código completo, y debajo lo explicaremos brevemente por si no se entiende el código.
public class ClaseGenerica <T>{ private T elemento; public ClaseGenerica(T e){ elemento = e; } public T getElemento(){ return elemento; } public static void main( String args[] ) { ClaseGenerica<Integer> cg1 = new ClaseGenerica<>(1); System.out.println("cg1 >> "+cg1.getElemento()); ClaseGenerica<String> cg2 = new ClaseGenerica<>("Hola"); System.out.println("cg2 >> "+cg2.getElemento()); } }Veamos lo primero la declaración de la clase, puedes apreciar que después del nombre de la clase tenemos <T>, nos indica que es una clase genérica, T podrá ser un String, un Integer, etc. Se sustituirá por un tipo real cuando llegue el momento.
Tenemos una variable llamada elemento, que es del tipo T (es decir genérico). En el constructor rellenaremos está variable con el dato que nos pasen, también del tipo T lógicamente.
Antes de llegar al main creamos una función para obtener el elemento, por eso retorna un tipo T, no haría falta está clase, tal y como está el código podríamos llamar al elemento directamente, pero para que veas el tipo de devolución de la función no está de más.
Dentro del main lo único que haremos es crear 2 objetos de esa clase, el primero de tipo Integer y el segundo de tipo String y mostramos el elemento para ver que funciona correctamente.
Si compilamos y ejecutamos el código veremos lo siguiente:
2. Función genérica en Java
Vamos ahora a pasar a ver una función genérica, al igual que antes lo primero que se enseña es el código completo y posteriormente se explica.
import java.util.ArrayList; public class Genericos{ public static <T> void show(ArrayList<T> entrada) { entrada.stream().forEach((elemento) -> { System.out.print(elemento+" "); }); System.out.println("\n"); } public static void main( String args[] ) { ArrayList<Integer> list1 = new ArrayList<>(); for(int i = 1; i <= 6; i++){ list1.add(i); } ArrayList<String> list2 = new ArrayList<String>() {{ add("this"); add("is"); add("a"); add("test"); }}; System.out.println( "--- Usando ArrayList de enteros ---" ); show(list1); System.out.println( "--- Usando ArrayList de cadenas ---" ); show(list2); } }Tenemos una función llamada show que recibe un ArrayList de cualquier tipo y lo recorrerá mostrando sus datos. Dentro del main creamos dos ArrayList, uno de tipo Integer y otro de tipo String, los inicializamos con unos datos para hacer la prueba. Y por último llamamos a la función show por cada ArrayList para comprobar que funciona correctamente.
Si compilamos y ejecutamos vamos a ver lo siguiente:
Aquí termina el tutorial, has podido comprobar lo fácil que es en Java utilizar datos genéricos, y así poder tener clases que pueden ser reutilizadas para diferentes tipos de objetos. Por ejemplo, si queremos tener un código que almacene facturas y otro que almacene los datos de los clientes, podemos echar mano a los genéricos, teniendo únicamente una clase.