[英]warning:[unchecked] unchecked conversion
我收到以下警告:
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();
}...
.....
..}
好吧,我们没有关于Query
在这里的细节,但大概它的getResultList
方法返回一个原始List
。 基本上编译器不能确定getResultList
返回的列表将只包含espressobar_milk
实例(它比那更微妙,但我们现在将它留在那里)。
您可以尝试使其成为强类型,可能是通过更改Query
类,或者您可以使用
@SuppressWarnings("unchecked")
如果您确信它是正确的,但无法实现编译时安全。
我正在使用 EJB 3.1 并且我遇到了同样的问题。 我找到了另一个解决方案:
TypedQuery<espressobar_milk> query = manager.createQuery("SELECT m FROM espressobar_milk m", espressobar_milk.class);
return query.getResultList();
这解决了未经检查的对话警告(您不再需要 @SuppressWarnings 注释)。
大概是结果
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();
}
未经检查的转换警告通常是由 Java 的泛型类型擦除机制引起的。 这个想法是使用泛型的代码可以与不使用泛型的代码合作(实际上,生成的代码省略了泛型类型)。
但是,当您尝试将通用性“附加到”非通用列表时,您也会收到此警告(因为这与会抛出 ClassCastException 的基于类的转换不同)。 在这种情况下,尝试将牛奶类型添加到 getResultList 返回的非泛型列表会产生错误。
阅读Java 泛型教程以获取更多信息。
@SuppressWarning ( "unchecked" )
应该:
@SuppressWarnings("unchecked")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.