Estoy teniendo problemas para entender el siguiente artículo: http://www.ibm.com/developerworks/java/library/j-jtp01255.htmlgenéricos de Java covarianza
Bajo,
los genéricos no son covariantes
el autor afirma,
Debido En una lista, agregando un Flotar a él parece perfectamente legal. Pero si ln se muestran dentadas con li, entonces rompería la promesa de seguridad de tipos implícita en la definición de li - que se trata de una lista de números enteros, que es la razón por tipos genéricos no pueden ser covariante.
No puedo entender la parte donde dice "si hubiera alias con li". ¿Qué quiere decir el autor por alias? (¿Referencia?). El fragmento de código sobre la línea citada parece ilustrar QUÉ es ilegal en Java y no POR QUÉ. Sería muy útil para mí si alguien pudiera explicar con un ejemplo. Gracias de antemano.
IIRC, tipos genéricos no son covariantes porque no podían cambiar cómo se implementaron/utilizados en versiones anteriores de Java (compatibilidad con versiones anteriores) matrices, lo hace sonar una campana a alguien? – Rhangaun
@Skeptic, las matrices son un ejemplo de cómo podría ser una implementación genérica covariante: arrojaría excepciones de tiempo de ejecución. Java no puede hacer eso porque los genéricos se borran en el tiempo de ejecución, por lo que solo puede controlarlo limitando la covarianza. – Yishai
@Yishai, ese problema con las matrices fue discutido por Steele en una presentación llamada "Growing a Language" que parece que no puedo encontrar ahora. – Rhangaun