2017-05-29 15 views
-3

をArrayListに私は、コードのjava.util.Vectorがjava.util.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'キャストのためのあなたのポイントは何ですか?なぜあなたはより分かりにくい '(List )'を使用しないのですか? – 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の中で、あなたがコンパイルできるインタフェース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; 
    } 
    
関連する問題