我收到以下警告:
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();
}...
.....
..}
提前感谢任何建议。
答案 0 :(得分:11)
好吧,我们没有Query
在这里的详细信息,但可能是getResultList
方法返回原始List
。基本上编译器不能确定getResultList
返回的列表只包含espressobar_milk
的实例(它稍微比它更微妙,但我们暂时将其保留在那里)。
您可以尝试强制键入,可能是通过更改Query
类,或者您可以使用
@SuppressWarnings("unchecked")
如果你确信它是正确的,但没有办法实现编译时的安全性。
答案 1 :(得分:10)
我正在使用EJB 3.1,我遇到了同样的问题。我找到了另一个解决方案:
TypedQuery<espressobar_milk> query = manager.createQuery("SELECT m FROM espressobar_milk m", espressobar_milk.class);
return query.getResultList();
这解决了未经检查的对话警告(您不再需要@SuppressWarnings注释)。
答案 2 :(得分:3)
看起来你正在使用Hibernate,它正在实现JPA 1.0(希望Hibernate在发布时实现JPA 2.0。(Toplink目前是JPA 2.0的参考实现))。 Hibernate没有使用任何java 1.5功能,因此没有可用的泛型集合。
答案 3 :(得分:2)
可能是
的结果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();
}
答案 4 :(得分:1)
未经检查的转换警告通常是由Java的Generics类型擦除机制引起的。这个想法是使用泛型的代码可以与不使用泛型的代码合作(事实上,生成的代码省略了泛型类型)。
但是,当您尝试将通用性“粘贴”到非泛型列表时,也会收到此警告(因为这与抛出ClassCastException的基于类的强制转换不同)。在这种情况下,尝试将牛奶类型添加到getResultList返回的非泛型列表中会产生错误。
阅读Java Generics tutorial了解更多信息。
答案 5 :(得分:1)
@SuppressWarning ( "unchecked" )
应该是:
@SuppressWarnings("unchecked")