2017-05-29 44 views
-3

我有下面的代碼java.util.Vector中不能被強制轉換爲java.util.ArrayList中 - 演員名單到ArrayList的

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; 
    } 

,我需要它返回的ArrayList,而不是陣列。有沒有返回ArrayList的查詢?

+1

什麼是你點的是'ArrayList'投?你爲什麼不使用更明顯的'(列表)'? – Tom

+0

*我需要它返回ArrayList * - 不,你不要 – wero

+2

我認爲這一切歸結爲繼承101和編碼到接口。 – Mena

回答

0

變化:

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(); 
    } 
0

你必須明白一個接口和一個類是:

  • 界面這裏是列表,它將向您提供您可以調用的一組函數/方法。
  • 你來說,在此情況下,ArrayList中,你對你說如何爲接口列表的方法將被執行,那麼現在,你的代碼可以編譯,並且很好的功能,做的類:

    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; 
    } 
    
相關問題