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

Que signifie l'avertissement Java ?

Sécurité du type : la conversion d'objet en liste vérifie en fait le type de liste effacé

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

Object object = getMyList();
List<Integer> list = (List<Integer>) object;
请先 登录 后评论

1 réponses

Mike Stone

Cet avertissement est là 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 de ClassCastException au moment de l'exécution sauf jusqu'à ce qu'un élément soit accédé à partir de la liste qui ne 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;

Toutefois, notez que vous ne pourrez pas utiliser certaines méthodes telles que 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 restreinte similaire, vous n'aurez qu'à subir le soulignement jaune dans Eclipse (ou une annotation SuppressWarning).< /p>

请先 登录 后评论
  • 4 abonnés
  • 0 favoris,433 Feuilleter
  • Mike Stone posée à 2022-12-10 09:17