java.util.Vector 不能强制转换为 java.util.ArrayList - cast List 到 A



我有以下代码

public List<Item> getDbItems()
    {
        ArrayList<Item> dbItems = new ArrayList<>();
        EntityTransaction entr=em.getTransaction();
            entr.begin();
        TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
        dbItems = (ArrayList<Item>) query.getResultList();
        em.getTransaction().commit();
        return dbItems;
    }

我需要它来返回数组列表而不是数组。是否有返回数组列表的查询?

更改:

dbItems = (ArrayList<Item>) query.getResultList();

对此:

dbItems = new ArrayList<Item>(query.getResultList());

现在,从设计的角度来看,方法的客户端应该决定他们想要使用哪种实现,尽可能使用抽象/接口。忘记 ArrayList,只需在查询方法周围使用 List,然后方法的客户端将不得不决定如何使用该 List 以及他们想要哪种实现。

此外,您不需要单个 SELECT 查询的事务

public List<Item> getDbItems()
    { 
        TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
        return query.getResultList();
    }

你必须了解什么是接口和类:

  • 这里的接口是List,它将为您提供可以调用的函数/方法集。
  • 你将实例化的类,在本例中为 ArrayList,你告诉你为接口 List 提供的方法将如何执行,所以现在,你的代码可以编译,并且功能很好,做:

    public List<Item> getDbItems()
    {
        List<Item> dbItems = new ArrayList<>();
        EntityTransaction entr=em.getTransaction();
            entr.begin();
        TypedQuery<Item> query = em.createQuery("SELECT i FROM Item i", Item.class);
        dbItems = query.getResultList();
        em.getTransaction().commit();
        return dbItems;
    }
    

相关内容