El tutorial oficial de Java sobre genéricos explica la eliminación de tipos y por qué se agregó al compilador:
Cuando se crea una instancia de un tipo genérico, el compilador traduce esos tipos mediante una técnica llamada borrado de tipo, un proceso en el que el compilador elimina toda la información relacionada con los parámetros de tipo y los argumentos de tipo dentro de una clase o método. El borrado de tipos permite que las aplicaciones Java que usan genéricos mantengan la compatibilidad binaria con las bibliotecas y aplicaciones Java que se crearon antes que los genéricos.
Probablemente fue un enfoque pragmático, o quizás el menos doloroso. Sin embargo, ahora que los genéricos son ampliamente compatibles en toda la industria, ¿qué se puede hacer para que no necesitemos borrado de tipo? ¿Es factible sin necesidad de romper la compatibilidad con versiones anteriores, o si es factible, es práctico?
¿La última declaración en la cita anterior se ha vuelto autorreferencial? Es decir: "la eliminación de tipos permite que las aplicaciones Java que usan genéricos mantengan la compatibilidad binaria con las bibliotecas y aplicaciones Java que se crearon con versiones de Java que realizan la eliminación de tipos".
Respuestas:
El final de la vida útil se aplica al Java Development Toolkit y al Java Runtime Environment. Y solo las versiones de Oracle (Sun). Pero no se aplica a las solicitudes escritas por terceros. La intención es nunca romper el código que se ha ejecutado en la JVM, por lo tanto, es poco probable que Java deje de hacer borrado de tipo.
Por supuesto, C # también introdujo genéricos en versiones posteriores de manera compatible con versiones anteriores sin borrar el tipo, pero básicamente significaba duplicar todas las clases de colección. Lo que supongo es lo que los diseñadores de Java no quieren hacer y, por lo tanto, por qué eligieron el tipo de borrado en primer lugar. Sin tipos de valor, la ventaja de los genéricos sin borrado de tipo no es tan grande.
fuente
List<int>
probablemente haría que las cargas de trabajo sean mucho más eficientes que las actualesList<Integer>
.