Sobes.tech
Middle+

¿Qué es la eliminación de tipos en Java?

sobes.tech AI

Respuesta de la IA

La eliminación de tipos (type erasure) es un proceso en Java en el que la información sobre los tipos se elimina en tiempo de compilación, y el bytecode compilado no contiene información sobre los parámetros genéricos.

Puntos clave:

  • Compatibilidad: Permite que los genéricos funcionen con código más antiguo que no usa genéricos.
  • Implementación: El compilador reemplaza los tipos parametrizados por su límite superior (generalmente Object) e inserta las conversiones de tipos necesarias.
  • Limitaciones:
    • No se pueden usar tipos primitivos como parámetros genéricos (por ejemplo, List<int>).
    • No se puede crear un array de un tipo parametrizado (por ejemplo, new List<String>[10]).
    • No se puede usar el operador instanceof para verificar un tipo parametrizado (por ejemplo, if (list instanceof List<String>)).
    • No se pueden sobrecargar métodos por tipos parametrizados si sus firmas eliminadas coinciden.

Ejemplo:

// Código fuente con genéricos
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // No requiere conversión explícita

// Bytecode después de la eliminación de tipos
List list = new ArrayList(); // Tipo List<String> reemplazado por List
list.add("hello");
String s = (String)list.get(0); // Conversión implícita insertada

A pesar de las limitaciones, la eliminación de tipos es un aspecto clave en la implementación de genéricos en Java, asegurando la compatibilidad hacia atrás.