Le tutoriel Java officiel sur les génériques explique l'effacement des types et pourquoi il a été ajouté au compilateur:
Lorsqu'un type générique est instancié, le compilateur traduit ces types par une technique appelée effacement de type - un processus où le compilateur supprime toutes les informations liées aux paramètres de type et aux arguments de type dans une classe ou une méthode. L'effacement de type permet aux applications Java qui utilisent des génériques de maintenir la compatibilité binaire avec les bibliothèques Java et les applications créées avant les génériques.
C'était probablement une approche pragmatique, ou peut-être la moins douloureuse. Cependant, maintenant que les génériques sont largement pris en charge dans l'industrie, que pouvons-nous faire pour que nous n'ayons pas besoin d'effacement de type? Est-ce faisable sans avoir besoin de briser la compatibilité descendante, ou si c'est faisable, est-ce pratique?
La dernière déclaration de la citation ci-dessus est-elle devenue auto-référentielle? C'est-à-dire: "l'effacement de type permet aux applications Java qui utilisent des génériques de maintenir la compatibilité binaire avec les bibliothèques Java et les applications qui ont été créées avec des versions Java qui effectuent l'effacement de type."