Metodos genéricos en java
Sería interesante si nosotros pudiéramos programar un metodo simple de ordenamiento que puediera ordenar los elementos en una estructura de datos (ArrayLists, Array, LinkedList) en el que sólo haya objetos Integer, o una estructura de datos de solo String, o cualquier otra estructura que soporta ordenamiento (donde los elementos pueden ser comparados).
Lo importante de esto es que seria también interesante redefinir una una clase de tipo de estructura de datos donde se podría detectar automaticamente su contenido, es decir, si tenemmos una lista de elementos de solo Integer, que a la hora de tratar de ingresar un String que nos muestre un mensaje o incluso un error de compilación que nos diga que esa lista solo pueden haber del tipo de elemento requerido
Nosotros podríamos crear un método génerico para el ordenamiento de objetos en una lista, que invoque a su respectivo método génerico para lista de Integer, lista String, lista de doble, y asi segun cada tipo. Entonces el compilador tiene la tarea de revisar el tipo de elemento que esta en la lista y éste se encarga de llamar a su método de ordenamiento para los objetos de ese tipo.
La clase MetodosSobrecargados ofrece una serie de tareas con operaciones similares en diferente tipos de datos. Para ilustrar los métodos genericos veamos el ejemplo de abajo, que contiene tres métodos sobrecargados llamados imprimirLista (lineas 7-13, lineas 16-22 y lineas 25-31). Estos métodos imprimen en representación de String los elementos de una lista de Integer, una lista de double y una lista de Character para poner a trabajar los métodos genericos, porque solo los tipos de referencia pueden ser usados con los métodos genéricos.
// Ejemplo de metodos sobrecargados
// Uso de metodos sobrecargados para imprimer listas de diferentes tipos
public class MetodosSobrecargados
{
// metodo imprimirLista que imprime una lista de Integer
public static void imprimirLista( Integer[] lista )
{
for ( Integer elemento: lista )
System.out.printf( "%s ", elemento);
System.out.println();
} // fin metodo imprimirLista
// metodo imprimirLista que imprime una lista de Double
public static void imprimirLista( Double[] lista )
{
for ( Double elemento: lista )
System.out.printf( "%s ", elemento );
System.out.println();
} // fin metodo imprimirLista
// metodo imprimirLista que imprime unalista de Character
public static void imprimirLista( Character[] lista)
{
for ( Character elemento : lista )
System.out.printf( "%s ", elemento);
System.out.println();
} // fin metodo imprimirLista
public static void main( String args[] )
{
// creacion de listas de Integer, Double y Character
Integer[] lista_integer = { 1, 2, 3, 4, 5, 6 };
Double[] lista_double = { 1.1, 2.2, 3.3, 4.4, 5.5, 6.6, 7.7 };
Character[] lista_caracter = { 'H', 'O', 'L', 'A' };
System.out.println( "la lista de Integer contiene:" );
imprimirLista( lista_integer );
System.out.println( "nla lista de doble contiene:" );
imprimirLista( lista_doble); // pass a Double lista de
System.out.println( "nla lista de Caracter contiene:" );
imprimirLista( characterlista de ); // pass a Character lista de
} // fin del metodo main
} // fin de la clase MetodosSobrecargados
La salida de la aplicación anterior seria algo como esto:
Array integerArray contains:
1 2 3 4 5 6Array doubleArray contains:
1.1 2.2 3.3 4.4 5.5 6.6 7.7Array characterArray contains:
H E L L O