Middle+
Qu'est-ce que l'effacement de types en Java?
sobes.tech IA
Réponse de l'IA
L’effacement des types (type erasure) est un processus en Java où l’information sur les types est supprimée lors de la compilation, et le bytecode compilé ne contient pas d’informations sur les paramètres génériques.
Points clés :
- Compatibilité : Permet aux génériques de fonctionner avec du code plus ancien qui n’utilise pas de génériques.
- Implémentation : Le compilateur remplace les types paramétrés par leur limite supérieure (généralement
Object) et insère les conversions de types nécessaires. - Limitations :
- Il n’est pas possible d’utiliser des types primitifs comme paramètres génériques (par exemple,
List<int>). - Il n’est pas possible de créer un tableau d’un type paramétré (par exemple,
new List<String>[10]). - Il n’est pas possible d’utiliser l’opérateur
instanceofpour vérifier un type paramétré (par exemple,if (list instanceof List<String>)). - Il n’est pas possible de surcharger des méthodes par types paramétrés si leurs signatures effacées sont identiques.
- Il n’est pas possible d’utiliser des types primitifs comme paramètres génériques (par exemple,
Exemple :
// Code source avec génériques
List<String> stringList = new ArrayList<>();
stringList.add("hello");
String s = stringList.get(0); // Pas besoin de conversion explicite
// Bytecode après effacement des types
List list = new ArrayList(); // Type List<String> remplacé par List
list.add("hello");
String s = (String)list.get(0); // Conversion implicite insérée
Malgré les limitations, l’effacement des types est un aspect clé de la mise en œuvre des génériques en Java, assurant la compatibilité rétroactive.