We fragmencie Java:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
ostatnia linia generuje ostrzeżenie
„Wyrażenie typu List
wymaga niezaznaczonej konwersji, aby było zgodne z List<SyndEntry>
”
Jaki jest właściwy sposób, aby to naprawić?
źródło
Jest to częsty problem w przypadku interfejsów API starszych niż Java 5. Aby zautomatyzować rozwiązanie firmy Erickson , możesz utworzyć następującą metodę ogólną:
Dzięki temu możesz:
Ponieważ to rozwiązanie sprawdza, czy elementy rzeczywiście mają właściwy typ elementu za pomocą odlewu, jest bezpieczne i nie wymaga
SuppressWarnings
.źródło
Wygląda na
SyndFeed
to, że nie używa leków generycznych.Możesz mieć niebezpieczny rzut i ostrzeżenie:
lub zadzwoń do Collections.checkedList - chociaż nadal będziesz musiał pominąć ostrzeżenie:
źródło
Collections.checkedList
zapobiegnie później dodaniu jakichkolwiek elementów spoza SyndEntry. Osobiście nie używamcheckedList
dużo, ale i tak nie często wpadam w tę niekontrolowaną sytuację rzucania ...Napisałeś
SyndFeed
?Czy
sf.getEntries
lista zwrotów lubList<SyndEntry>
? Domyślam się, że wraca,List
a zmiana go na zwrotList<SyndEntry>
rozwiązuje problem.Jeśli
SyndFeed
jest częścią biblioteki, nie sądzę, aby można było usunąć ostrzeżenie bez dodawania@SuppressWarning("unchecked")
adnotacji do metody.źródło
SyndFeed
pochodzi z rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . Wydaje się, że problem został rozwiązany w nowszych wersjach Rzymu, takich jak te znalezione na mvnrepository.com/artifact/com.rometools/rome/1.9.0Jeśli używasz guawy i wszystko, co chcesz zrobić, to powtórzyć swoje wartości:
Jeśli potrzebujesz aktualnej listy, możesz użyć
lub
źródło
źródło
Jeśli spojrzysz na javadoc dla klasy
SyndFeed
(myślęcom.sun.syndication.feed.synd.SyndFeed
, że odnosisz się do klasy ), metoda getEntries () nie zwracajava.util.List<SyndEntry>
, ale po prostu zwracajava.util.List
.Potrzebujesz więc do tego wyraźnej obsady.
źródło
Jeśli nie chcesz umieszczać @SuppressWarning ("unchecked") przy każdym wywołaniu sf.getEntries (), zawsze możesz utworzyć opakowanie, które zwróci List.
Zobacz to inne pytanie
źródło
Jeszcze łatwiej
return new ArrayList<?>(getResultOfHibernateCallback(...))
źródło