77 votes

Quelle est la signification du type warning de sécurité dans certains distributions génériques Java?

Quel est le sens de l'avertissement Java?

Type safety: la conversion d'objet en liste est en rapport avec le type effacé List

Je reçois cet avertissement lorsque je tente 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;
 

53voto

Mike Stone Points 21293

Cet avertissement est là parce que Java n'est pas réellement stocker des informations de type à l'exécution à un objet qui utilise des médicaments génériques. Ainsi, si object est en fait un List<String>, il n'y aura pas d' ClassCastException au moment de l'exécution, sauf jusqu'à ce qu'un élément est 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 cette erreur de type générique de l'information. Le code tenant toujours une référence à la liste, mais avec le bon type générique de l'information ont désormais incompatible liste. Pour supprimer l'avertissement, essayez:

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

Toutefois, notez que vous ne serez pas en mesure d'utiliser certaines méthodes telles que l'ajout, car le compilateur ne sait pas si vous essayez d'ajouter un objet de type incorrect. Le ci-dessus ne fonctionne dans beaucoup de situations, mais si vous devez l'utiliser, ajouter, ou de certains de la même façon restreinte méthode, vous aurez juste à souffrir le jaune souligner dans Eclipse (ou un SuppressWarning d'annotation).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X