Im Java-Snippet:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
Die letzte Zeile generiert die Warnung
"Der Ausdruck des Typs List
muss deaktiviert konvertiert werden, damit er übereinstimmt. List<SyndEntry>
"
Was ist ein geeigneter Weg, um dies zu beheben?
quelle
Dies ist ein häufiges Problem beim Umgang mit APIs vor Java 5. Um die Lösung von erickson zu automatisieren , können Sie die folgende generische Methode erstellen:
Dies ermöglicht Ihnen Folgendes:
Da diese Lösung mittels einer Umwandlung überprüft, ob die Elemente tatsächlich den richtigen Elementtyp haben, ist sie sicher und nicht erforderlich
SuppressWarnings
.quelle
Es sieht so aus,
SyndFeed
als würden keine Generika verwendet.Sie könnten entweder eine unsichere Besetzung und eine Warnunterdrückung haben:
oder rufen Sie Collections.checkedList auf - obwohl Sie die Warnung immer noch unterdrücken müssen:
quelle
Collections.checkedList
wird später das Hinzufügen von Nicht-SyndEntry-Elementen verhindern. Ich persönlich benutze nichtcheckedList
viel, aber dann komme ich auch nicht oft in diese ungeprüfte Besetzungssituation ...Hast du das geschrieben
SyndFeed
?Gibt
sf.getEntries
Liste zurück oderList<SyndEntry>
? Ich vermute, es kehrt zurückList
und wenn Sie es in "Zurück" ändern,List<SyndEntry>
wird das Problem behoben.Wenn
SyndFeed
es Teil einer Bibliothek ist, können Sie die Warnung nicht entfernen, ohne die@SuppressWarning("unchecked")
Annotation zu Ihrer Methode hinzuzufügen .quelle
SyndFeed
kommt von rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . Das Problem scheint in neueren Versionen von Rom behoben zu sein, wie sie unter mvnrepository.com/artifact/com.rometools/rome/1.9.0Wenn Sie Guava verwenden und nur Ihre Werte durchlaufen möchten:
Wenn Sie eine aktuelle Liste benötigen, können Sie diese verwenden
oder
quelle
quelle
Wenn Sie sich das Javadoc für die Klasse ansehen
SyndFeed
(ich nehme an, Sie beziehen sich auf die Klassecom.sun.syndication.feed.synd.SyndFeed
), gibt die Methode getEntries () nicht zurückjava.util.List<SyndEntry>
, sondern nurjava.util.List
.Dafür benötigen Sie eine explizite Besetzung.
quelle
Wenn Sie nicht bei jedem Aufruf von sf.getEntries () @SuppressWarning ("nicht aktiviert") einfügen möchten, können Sie jederzeit einen Wrapper erstellen, der List zurückgibt.
Siehe diese andere Frage
quelle
Sogar einfacher
return new ArrayList<?>(getResultOfHibernateCallback(...))
quelle