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

StackOverflow https://stackoverflow.com/questions/382

Question

Quelle est la signification du Avertissement Java?

Tapez la sécurité :Le transtypage de Object vers List<Integer> vérifie en fait le type effacé List

Je reçois cet avertissement lorsque j'essaie de convertir un objet en un type contenant des informations génériques, comme dans le code suivant :

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Était-ce utile?

La solution

Cet avertissement existe car Java ne stocke pas réellement les informations de type au moment de 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 au moment de l'exécution, sauf jusqu'à ce qu'un élément soit accessible à partir de la liste qui ne correspond pas au type générique défini dans la variable.

Cela peut entraîner des complications supplémentaires si des éléments sont ajoutés à la liste, avec ces informations de type générique incorrectes.Tout code contenant toujours une référence à la liste mais avec les informations de type générique correctes aura désormais une liste incohérente.

Pour supprimer l'avertissement, essayez :

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

Notez cependant que vous ne pourrez pas utiliser certaines méthodes comme add car le compilateur ne sait pas si vous essayez d'ajouter un objet de type incorrect.Ce qui précède fonctionnera dans de nombreuses situations, mais si vous devez utiliser add, ou une méthode similaire, vous n'aurez qu'à subir le soulignement jaune dans Eclipse (ou un SuppressWarning annotation).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top