предупреждение: [не проверено] не проверено преобразование - PullRequest
9 голосов
/ 25 апреля 2009

Я получаю следующее предупреждение:

warning:[unchecked] unchecked conversion
[javac]found:java.util.List
[javac] required:java.util.List<edu.fullerton.cs476s09.espressobar.jpa.espressobar_milk>
return query.getResultList();

В чем может быть проблема и вероятное решение. Я использую следующий код:

@Stateless
@Remote(Order.class)
//@EntityListeners(MyListener.class)
public class OrderBean implements Order
{ 
    /**
     * The entity manager object, injected by the container
     */

    @PersistenceContext

    private EntityManager manager;

    public List<espressobar_milk> listMilk() 
    {
        Query query = manager.createQuery("SELECT m FROM espressobar_milk m");
        return query.getResultList();
    }...
.....
..}

Заранее спасибо за любые предложения.

Ответы [ 6 ]

11 голосов
/ 25 апреля 2009

Ну, у нас нет сведений о том, что Query здесь, но, вероятно, его метод getResultList возвращает необработанный List. По сути, компилятор не может быть уверен, что список, возвращаемый getResultList, будет содержать только экземпляры espressobar_milk (это немного более тонко, чем это, но мы пока оставим его там).

Вы можете попытаться сделать его строго типизированным, возможно, изменив класс Query, или вы можете аннотировать метод с помощью

@SuppressWarnings("unchecked")

если вы уверены, что это правильно, но нет способа обеспечить безопасность во время компиляции.

10 голосов
/ 09 января 2012

Я использую EJB 3.1, и у меня была такая же проблема. Я нашел другое решение:

TypedQuery<espressobar_milk> query = manager.createQuery("SELECT m FROM espressobar_milk m", espressobar_milk.class);         
return query.getResultList(); 

Это решает предупреждение о неконтролируемом разговоре (вам больше не нужна аннотация @SuppressWarnings).

3 голосов
/ 25 апреля 2009

Похоже, вы используете Hibernate , который в настоящее время реализует JPA 1.0 (надеюсь, Hibernate внедрит JPA 2.0 после его выпуска. ( Toplink в настоящее время является эталонной реализацией JPA 2.0 )). Hibernate не использует какие-либо функции Java 1.5, поэтому нет доступных общих коллекций.

2 голосов
/ 25 апреля 2009

Вероятно, результат

return query.getResultList();

- это List, а не List< E >, как ожидается (List< espressobar_milk >). [http://java.sun.com/j2se/1.5.0/docs/api/java/util/List.html] Вот почему оно показывает предупреждение. В любом случае вы можете отключить это предупреждение, используя:

@SuppressWarnings ( "unchecked" )
public List<espressobar_milk> listMilk() 
{
    Query query = manager.createQuery("SELECT m FROM espressobar_milk m");
    return query.getResultList();
}
1 голос
/ 29 ноября 2011
@SuppressWarning ( "unchecked" ) 

должно быть:

@SuppressWarnings("unchecked") 
1 голос
/ 25 апреля 2009

Предупреждения о непроверенных конверсиях обычно возникают из-за механизма стирания типов для универсального кода Java. Идея состоит в том, что код, который использует дженерики, может взаимодействовать с кодом, который не использует дженерики (фактически, сгенерированный код опускает дженерик-тип).

Однако вы также получаете это предупреждение, когда пытаетесь «привязать» универсальность к не универсальному списку (поскольку это отличается от преобразования на основе классов, которое вызовет исключение ClassCastException). В этом случае попытка привязать тип молока к тому, что является неуниверсальным списком, возвращаемым getResultList, приводит к ошибке.

Прочтите Обучающее руководство по Java Generics для получения дополнительной информации об этом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...