¿Qué es el type erasure en los generics de Java?
Opciones
- Los generics se borran en tiempo de ejecución, así que
List<String>esList(Opción correcta) - Los tipos genéricos se borran del código fuente después de compilar
- Java elimina cualquier clase genérica que nadie use
- Los generics hacen el programa más lento, porque los tipos se comprueban después
Respuesta
El compilador elimina la información de tipos genéricos; en tiempo de ejecución, List<String> y List<Integer> son simplemente List
Por qué
Los generics (List<String>) permiten al compilador comprobar los tipos para que no necesites casts. Tras comprobarlos, el compilador elimina (erases) los argumentos de tipo y deja solo el tipo raw en el bytecode.
Consecuencias: no puedes escribir new T(), instanceof List<String> ni crear new T[10], y List<int> no está permitido porque los argumentos de tipo deben ser objetos.
Recuerda
Los generics son solo una comprobación en tiempo de compilación.