Middle
¿Qué son los Genéricos y para qué se utilizan?
sobes.tech AI
Respuesta de la IA
Los genéricos en Java permiten crear clases, interfaces y métodos que trabajan con tipos parametrizados.
El propósito principal de los genéricos:
- Mejorar la seguridad de tipos: El compilador verifica los tipos en tiempo de compilación, previniendo
ClassCastExceptionen tiempo de ejecución. - Eliminar la necesidad de hacer conversiones de tipos: No es necesario convertir manualmente los tipos al extraer elementos de colecciones.
- Crear código más flexible y reutilizable: Se pueden escribir algoritmos y estructuras de datos genéricos aplicables a diferentes tipos de datos.
Ejemplo sin genéricos:
// Antes de Java 5
import java.util.ArrayList;
import java.util.List;
public class OldStyleList {
public static void main(String[] args) {
List list = new ArrayList(); // sin tipificación
list.add("hola");
list.add(123); // se puede agregar cualquier objeto
String s = (String) list.get(0); // se requiere conversión de tipo
Integer i = (Integer) list.get(1); // se requiere conversión de tipo
// Puede ocurrir error de conversión de tipo
// String error = (String) list.get(1); // ClassCastException
System.out.println(s);
System.out.println(i);
}
}
Ejemplo con genéricos:
// Usando genéricos
import java.util.ArrayList;
import java.util.List;
public class GenericList {
public static void main(String[] args) {
List<String> list = new ArrayList<>(); // lista de cadenas
list.add("hola");
// list.add(123); // error de compilación - no se puede agregar Integer
String s = list.get(0); // sin necesidad de conversión de tipo
// No es posible agregar otro tipo, previene errores
// List<Integer> intList = new ArrayList<>();
// intList.add("mundo"); // error de compilación
System.out.println(s);
}
}
Los genéricos también se usan en:
- Clases:
ArrayList<E>,HashMap<K, V> - Interfaces:
List<E>,Map<K, V> - Métodos:
<T> void printArray(T[] array) - Restricciones de tipos:
<T extends Comparable<T>>(restricción a tipos que implementanComparable)
La implementación de genéricos en Java se basa en "eliminación de tipos" (type erasure) en tiempo de compilación. Esto significa que la información sobre los tipos genéricos se elimina, y en tiempo de ejecución la JVM opera con tipos sin especificar. Esto garantiza compatibilidad con versiones anteriores de Java, pero tiene algunas limitaciones.