Avatar ·

Que sont les raw types dans les Generics Java et pourquoi devraient-ils être évités ?

Bonjour à tous ! Je suis un développeur Java débutant, j'étudie les generics et je suis tombé sur un concept étrange appelé "raw type" (type brut). Je comprends à peu près que cela a un rapport avec les génériques, mais je n'en saisis pas encore complètement l'essence. Supposons que j'ai ce code : ```java List list = new ArrayList(); // est-ce un raw type ? list.add("chaîne"); list.add(123); ``` Le compilateur émet un avertissement, mais le code fonctionne. Je peux mettre n'importe quoi dans la liste. Mais si j'utilise un type paramétré : ```java List list2 = new ArrayList<>(); list2.add("chaîne"); // list2.add(123); // erreur de compilation ``` Alors le compilateur se plaint. Quelle est la différence ? Pourquoi le raw type est-il considéré comme une mauvaise pratique ? Après tout, le code fonctionne avec. J'ai entendu dire que les raw types existent pour la rétrocompatibilité, mais pourquoi les utiliser dans du nouveau code ? Et quel est leur lien avec l'effacement de type (type erasure) ? Donnez, s'il vous plaît, des exemples où l'utilisation d'un raw type peut entraîner des erreurs à l'exécution qui ne peuvent pas être détectées à la compilation.