Quel est le sens de l'avertissement de sécurité de type Java dans certains génériques plâtres?

voix
61

Quelle est la signification de l' avertissement Java ?

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

Je reçois cet avertissement lorsque je tente de jeter un objet à un type avec des informations génériques, comme dans le code suivant:

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
Créé 02/08/2008 à 09:58
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
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 objectest en fait un List<String>, il n'y aura pas ClassCastExceptionà l' exécution , sauf jusqu'à ce qu'un article 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 ces informations de type générique incorrect. Tout code tenant toujours une référence à la liste, mais les informations de type générique correct 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 travailler dans beaucoup de situations, mais si vous devez utiliser ajouter, ou une méthode de la même restreint, vous aurez juste à subir le soulignement jaune dans Eclipse (ou une SuppressWarningannotation).

Créé 02/08/2008 à 09:58
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more