繁体   English   中英

警告:[unchecked] 未经检查的转换

[英]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 注释)。

看起来您正在使用Hibernate ,它目前正在实现 JPA 1.0(希望 Hibernate 在发布时能够实现 JPA 2.0。( Toplink目前是 JPA 2.0 的参考实现))。 Hibernate 不使用任何 java 1.5 功能,因此没有可用的通用集合。

大概是结果

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM