No fragmento de Java:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
a última linha gera o aviso
"A expressão do tipo List
precisa de conversão desmarcada para estar em conformidade com List<SyndEntry>
"
Qual é a maneira apropriada de corrigir isso?
fonte
Esse é um problema comum ao lidar com APIs pré-Java 5. Para automatizar a solução a partir de erickson , você pode criar o seguinte método genérico:
Isso permite que você faça:
Como esta solução verifica se os elementos realmente têm o tipo correto de elemento por meio de uma conversão, é seguro e não requer
SuppressWarnings
.fonte
Parece que
SyndFeed
não está usando genéricos.Você pode ter um elenco inseguro e uma supressão de aviso:
ou chame Collections.checkedList - embora você ainda precise suprimir o aviso:
fonte
Collections.checkedList
impedirá a adição de qualquer elemento não SyndEntry posteriormente. Eu pessoalmente não usocheckedList
muito, mas então eu também não costumam chegar a esta situação elenco desmarcada qualquer maneira ...Você escreveu o
SyndFeed
?Retorna
sf.getEntries
Lista ouList<SyndEntry>
? Meu palpite é que ele retornaList
e alterá-lo para retornarList<SyndEntry>
corrigirá o problema.Se
SyndFeed
faz parte de uma biblioteca, acho que você não pode remover o aviso sem adicionar a@SuppressWarning("unchecked")
anotação ao seu método.fonte
SyndFeed
vem de rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . O problema parece estar corrigido em versões mais recentes de Roma, como as encontradas em mvnrepository.com/artifact/com.rometools/rome/1.9.0Se você estiver usando o Guava e tudo o que você deseja fazer é percorrer seus valores:
Se você precisar de uma lista real, poderá usar
ou
fonte
fonte
Se você olhar o javadoc para a classe
SyndFeed
(acho que você está se referindo à classecom.sun.syndication.feed.synd.SyndFeed
), o método getEntries () não retornarájava.util.List<SyndEntry>
, mas retornará apenasjava.util.List
.Então você precisa de um elenco explícito para isso.
fonte
Se você não deseja colocar @SuppressWarning ("unchecked") em cada chamada sf.getEntries (), você sempre pode criar um wrapper que retornará List.
Veja esta outra pergunta
fonte
Ainda mais fácil
return new ArrayList<?>(getResultOfHibernateCallback(...))
fonte