Dans l'extrait de code Java:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
la dernière ligne génère l'avertissement
"L'expression de type List
nécessite une conversion non vérifiée pour se conformer à List<SyndEntry>
"
Quelle est la manière appropriée de résoudre ce problème?
la source
C'est un problème courant lors du traitement des API pré-Java 5. Pour automatiser la solution d'erickson , vous pouvez créer la méthode générique suivante:
Cela vous permet de faire:
Parce que cette solution vérifie que les éléments ont bien le type d'élément correct au moyen d'un moulage, elle est sûre et ne nécessite pas
SuppressWarnings
.la source
Il semble
SyndFeed
ne pas utiliser de génériques.Vous pouvez avoir un casting non sécurisé et une suppression d'avertissement:
ou appelez Collections.checkedList - bien que vous deviez toujours supprimer l'avertissement:
la source
Collections.checkedList
cela empêchera l'ajout d'éléments non-SyndEntry plus tard. Personnellement, je n'en utilise pascheckedList
beaucoup, mais je ne me retrouve pas non plus souvent dans cette situation de casting incontrôlée de toute façon ...Avez-vous écrit le
SyndFeed
?Est -
sf.getEntries
retour Liste ouList<SyndEntry>
? Je suppose qu'il revientList
et le changer pour revenirList<SyndEntry>
résoudra le problème.Si
SyndFeed
fait partie d'une bibliothèque, je ne pense pas que vous puissiez supprimer l'avertissement sans ajouter l'@SuppressWarning("unchecked")
annotation à votre méthode.la source
SyndFeed
provient de rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . Le problème semble être résolu dans les versions plus récentes de Rome comme celles trouvées sur mvnrepository.com/artifact/com.rometools/rome/1.9.0Si vous utilisez Guava et que tout ce que vous voulez faire est de parcourir vos valeurs:
Si vous avez besoin d'une liste réelle, vous pouvez utiliser
ou
la source
la source
Si vous regardez le javadoc pour la classe
SyndFeed
(je suppose que vous faites référence à la classecom.sun.syndication.feed.synd.SyndFeed
), la méthode getEntries () ne retourne pasjava.util.List<SyndEntry>
, mais renvoie simplementjava.util.List
.Vous avez donc besoin d'un casting explicite pour cela.
la source
Si vous ne voulez pas mettre @SuppressWarning ("non coché") à chaque appel sf.getEntries (), vous pouvez toujours créer un wrapper qui renverra List.
Voir cette autre question
la source
Encore plus simple
return new ArrayList<?>(getResultOfHibernateCallback(...))
la source