2017-05-29 1 views
-3

ich folgenden Code haben Arraylistjava.util.Vector kann nicht auf java.util.ArrayList gegossen werden - Besetzungsliste

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

Und ich brauche es die Arraylist statt des Array zurückzukehren. Gibt es eine Abfrage, die ArrayList zurückgibt?

+1

Was ist Ihr Punkt für die 'ArrayList' Besetzung? Warum benutzt du nicht das offensichtlichere '(Liste )'? – Tom

+0

* Ich brauche es, um die ArrayList zurückzugeben * - nein, Sie nicht – wero

+2

Ich denke, das alles läuft auf Vererbung 101 und Codierung auf eine Schnittstelle. – Mena

Antwort

0

Wechsel:

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

dazu:

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

nun aus gestalterischer Sicht sollten Kunden Ihrer Methode entscheiden, welche Art der Implementierung sie verwenden möchten, verwenden Sie Abstraktionen/interfaces, wann immer möglich. Vergessen Sie ArrayList, verwenden Sie einfach Alle um Ihre Abfragemethode auflisten, und dann müssen die Clients Ihrer Methode entscheiden, wie diese Liste und welche Implementierung verwendet werden sollen.

Auch brauchen Sie nicht eine Transaktion für eine einzelne SELECT-Abfrage

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

Sie müssen verstehen, was eine Schnittstelle und eine Klasse:

  • Das Interface ist hier Liste, es stellt Ihnen die Funktionen/Methoden zur Verfügung, die Sie anrufen können.
  • Die Klasse Sie werden beispielsweise in diesem Fall Arraylist, die Sie Ihnen sagen wie die Methoden für die Schnittstelle Liste bereitgestellt wird ausgeführt, so jetzt können, um Ihren Code kompilieren, und gut funktionieren, tun:

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