En el fragmento de Java:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
la última línea genera la advertencia
"La expresión de tipo List
necesita una conversión sin marcar para ajustarse a List<SyndEntry>
"
¿Cuál es una forma apropiada de arreglar esto?
fuente
Este es un problema común cuando se trata de API anteriores a Java 5. Para automatizar la solución de erickson , puede crear el siguiente método genérico:
Esto te permite hacer:
Debido a que esta solución verifica que los elementos tengan el tipo de elemento correcto por medio de un molde, es seguro y no requiere
SuppressWarnings
.fuente
Parece que
SyndFeed
no está usando genéricos.Podría tener un yeso inseguro y una supresión de advertencia:
o llame a Collections.checkedList , aunque aún deberá suprimir la advertencia:
fuente
Collections.checkedList
evitará la adición de elementos que no sean SyndEntry más adelante. Yo personalmente no usocheckedList
mucho, pero tampoco me meto en esta situación de lanzamiento sin control de todos modos ...¿Escribiste el
SyndFeed
?¿
sf.getEntries
Devuelve la lista oList<SyndEntry>
? Supongo que regresaList
y cambiarlo para que regreseList<SyndEntry>
solucionará el problema.Si
SyndFeed
es parte de una biblioteca, no creo que pueda eliminar la advertencia sin agregar la@SuppressWarning("unchecked")
anotación a su método.fuente
SyndFeed
proviene de rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . El problema parece solucionarse en versiones más recientes de Roma como las que se encuentran en mvnrepository.com/artifact/com.rometools/rome/1.9.0Si está usando Guava y todo lo que quiere hacer es iterar a través de sus valores:
Si necesita una lista real, puede usar
o
fuente
fuente
Si observas el javadoc para la clase
SyndFeed
(supongo que te estás refiriendo a la clasecom.sun.syndication.feed.synd.SyndFeed
), el método getEntries () no regresajava.util.List<SyndEntry>
, sino que solo devuelvejava.util.List
.Entonces necesitas un reparto explícito para esto.
fuente
Si no desea poner @SuppressWarning ("sin marcar") en cada llamada sf.getEntries (), siempre puede hacer un contenedor que devolverá List.
Ver esta otra pregunta
fuente
Aún más fácil
return new ArrayList<?>(getResultOfHibernateCallback(...))
fuente