Maison >Java >javaDidacticiel >Qu'est-ce que la pollution en tas à Java et comment la résoudre ?
La pollution du tas est une situation qui se produit au moment de l'exécution Java lorsqu'une variable d'un type paramétré fait référence à un objet qui n'est pas de ce type paramétré. Ce terme est souvent rencontré lorsqu'on travaille avec des génériques. Cet article vise à révéler le concept de pollution en tas à Java et à fournir des conseils pour résoudre et prévenir la pollution en tas.
Avant d'aborder la pollution du tas, passons rapidement en revue les génériques Java. Les génériques ont été introduits dans Java 5 pour assurer la sécurité des types et garantir que les classes, les interfaces et les méthodes peuvent être utilisées avec différents types de données tout en conservant la vérification des types au moment de la compilation.
Les génériques aident à détecter et à éliminer les exceptions de conversion de classe qui étaient courantes dans les collections antérieures à Java 5, où vous deviez transtyper les éléments récupérés de la collection.
La pollution du tas signifie que les variables de types paramétrés font référence à des objets de différents types paramétrés, ce qui amène la machine virtuelle Java (JVM) à lever ClassCastException.
List<String><string> list = new ArrayList<String><string>(); List rawList = list; rawList.add(8); // heap pollution for (String str : list) { // ClassCastException at runtime System.out.println(str); } </string></string>
Dans l'extrait de code ci-dessus, ArrayList ne doit contenir que des types String, mais la référence Raw List rawList y ajoute un Integer. Il s'agit d'une opération valide car les types bruts en Java ne sont pas vérifiés au moment de la compilation. La boucle for améliorée essaie d'attribuer cet entier à une référence de chaîne dans la liste, une exception ClassCastException est levée au moment de l'exécution. C'est un exemple clair de pollution du tas
.Bien que la pollution du tas puisse conduire à une ClassCastException au moment de l'exécution, elle peut être atténuée à l'aide de plusieurs pratiques
Évitez de mélanger les types primitifs et paramétrés − C'est le moyen le plus direct d'éviter la pollution des tas. Évitez d'utiliser des types primitifs dans votre code et assurez-vous que toutes les collections sont correctement paramétrées.
List<string> list = new ArrayList<string>(); list.add(8); // compiler error </string></string>
Utilisez l'annotation @SafeVarargs - Si vous disposez d'une méthode générique qui n'applique pas la sécurité de son type, vous pouvez supprimer les avertissements de pollution du tas avec l'annotation @SafeVarargs. Cependant, utilisez-la uniquement lorsque vous êtes certain que la méthode a gagné. cela ne provoque pas de ClassCastException.
@SafeVarargs static void display(List<string>... lists) { for (List<string> list : lists) { System.out.println(list); } } </string></string>
Utilisez l'annotation @SuppressWarnings("unchecked") - Cette annotation peut également supprimer les avertissements de pollution du tas. Il s'agit d'un outil plus large que @SafeVarargs et peut être utilisé pour l'affectation de variables et les méthodes.
@SuppressWarnings("unchecked") void someMethod() { List<string> list = new ArrayList<string>(); List rawList = list; rawList.add(8); // warning suppressed } </string></string>
La pollution par le tas est un piège potentiel en Java qui se produit lors du mélange de types primitifs et paramétrés, notamment dans les collections. Bien que cela puisse provoquer des exceptions d’exécution, il peut être facilement évité en comprenant et en suivant les meilleures pratiques en matière de génériques. Les annotations @SafeVarargs et @SuppressWarnings("unchecked") de Java peuvent être utilisées pour supprimer les avertissements de pollution du tas dans des circonstances appropriées, mais la clé est de toujours garantir que votre code est de type sécurisé.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!