La pollution de la heap est un terme technique. Il fait référence à des références qui ont un type qui n'est pas un supertype de l'objet auquel elles pointent.
List listOfAs = new ArrayList<>();
List listOfBs = (List)(Object)listOfAs; // points to a list of As
Cela peut entraîner des ClassCastException
"inexpliquées".
// if the heap never gets polluted, this should never throw a CCE
B b = listOfBs.get(0);
@SafeVarargs
ne prévient pas du tout cela. Cependant, il existe des méthodes qui ne pollueront pas la heap, le compilateur ne peut tout simplement pas le prouver. Auparavant, les appelants de ces API recevaient des avertissements agaçants complètement inutiles mais devaient les supprimer à chaque site d'appel. Maintenant, l'auteur de l'API peut le supprimer une fois au niveau de la déclaration.
Cependant, si la méthode n'est en fait pas sûre, les utilisateurs ne seront plus avertis.
9 votes
Détails ici : docs.oracle.com/javase/specs/jls/se7/html/…
0 votes
Possible duplicate de Fonction varargs Java 1.7 signalée comme avertissement non vérifié
0 votes
Je vois cela dans mon éditeur :
Pollution possible du tas provenant d'un type vararg paramétré
0 votes
Si vous êtes confus (comme moi) quant à quand vous pouvez utiliser en toute sécurité l'annotation, ici se trouve une explication utile pour vérifier si votre méthode est sûre à annoter avec
@SafeVarargs