2008-08-02 28 views
61

Quelle est la signification de l'avertissement Java?Quelle est la signification de l'avertissement de sécurité de type dans certains lancements de génériques Java?

sécurité Type: La distribution de l'objet à la liste vérifie effectivement contre la liste de type effacé

Je reçois cet avertissement lorsque je tente de jeter un objet à un type d'information générique, comme dans le code suivant:

Object object = getMyList(); 
List<Integer> list = (List<Integer>) object; 
+1

Si vous voulez vous débarrasser du soulignement jaune dans Eclipse, mais que vous ne voulez pas ajouter '@ SuppressWarning', vous avez la possibilité d'ignorer l'avertissement dans les préférences. Dans la fenêtre des préférences, allez dans _Java> Compilateur> Erreurs/Avertissements_, puis dans la section _Generic types_, changez l'option ** Opération de type générique non cochée ** en ** Ignorer ** – Axel

Répondre

50

Cet avertissement est là parce que Java ne stocke pas les informations de type réellement à l'exécution dans un objet qui utilise des génériques. Ainsi, si object est en fait un List<String>, il n'y aura pas ClassCastException lors de l'exécution, sauf jusqu'à ce qu'un élément soit accédé de la liste qui ne correspond pas au type générique défini dans la variable.

Cela peut entraîner d'autres complications si des éléments sont ajoutés à la liste, avec cette information de type générique incorrecte. Tout code contenant toujours une référence à la liste mais avec les informations de type générique correct aura maintenant une liste incohérente.

Pour supprimer l'avertissement, essayez:

List<?> list = (List<?>) object; 

Cependant, notez que vous ne serez pas en mesure d'utiliser certaines méthodes telles que ajouter parce que le compilateur ne sait pas si vous essayez d'ajouter un objet de type incorrect. Ce qui précède fonctionnera dans beaucoup de situations, mais si vous devez utiliser add, ou une méthode similaire restreinte, vous aurez juste à subir le soulignement jaune dans Eclipse (ou une annotation SuppressWarning).