Во фрагменте Java:
SyndFeedInput fr = new SyndFeedInput();
SyndFeed sf = fr.build(new XmlReader(myInputStream));
List<SyndEntry> entries = sf.getEntries();
последняя строка генерирует предупреждение
«Выражение типа List
нуждается в непроверенном преобразовании, чтобы соответствовать List<SyndEntry>
»
Как правильно это исправить?
источник
Это распространенная проблема при работе с API до Java 5. Чтобы автоматизировать решение от erickson , вы можете создать следующий общий метод:
Это позволяет вам делать:
Поскольку это решение проверяет, что элементы действительно имеют правильный тип элемента с помощью приведения, оно безопасно и не требует
SuppressWarnings
.источник
Похоже,
SyndFeed
не использует дженерики.Вы могли бы иметь небезопасное приведение и подавление предупреждения:
или вызовите Collections.checkedList - хотя вам все равно нужно подавить предупреждение:
источник
Collections.checkedList
позже мы предотвратим добавление элементов, не относящихся к SyndEntry. Лично я мало пользуюсьcheckedList
, но в любом случае я тоже не часто попадаю в эту непроверенную ситуацию с актерами ...Вы написали
SyndFeed
?sf.getEntries
Возвращает ли список илиList<SyndEntry>
? Я предполагаю, что он возвращается,List
и изменение его на возвратList<SyndEntry>
решит проблему.Если
SyndFeed
это часть библиотеки, я не думаю, что вы можете удалить предупреждение, не добавляя@SuppressWarning("unchecked")
аннотацию к вашему методу.источник
SyndFeed
взято из rometools.github.io/rome/ROMEReleases/ROME1.0Release.html . Эта проблема, похоже, решена в более поздних версиях Рима, таких как те, которые можно найти на mvnrepository.com/artifact/com.rometools/rome/1.9.0Если вы используете Guava и все, что вы хотите сделать, это перебрать ваши значения:
Если вам нужен актуальный список, вы можете использовать
или
источник
источник
Если вы посмотрите на javadoc для класса
SyndFeed
(я полагаю, вы ссылаетесь на классcom.sun.syndication.feed.synd.SyndFeed
), метод getEntries () не возвращаетjava.util.List<SyndEntry>
, а возвращает простоjava.util.List
.Таким образом, вам нужно явное приведение для этого.
источник
Если вы не хотите помещать @SuppressWarning ("unchecked") в каждый вызов sf.getEntries (), вы всегда можете создать оболочку, которая будет возвращать List.
Смотрите этот другой вопрос
источник
Еще проще
return new ArrayList<?>(getResultOfHibernateCallback(...))
источник