web-dev-qa-db-fra.com

Impossible d'instancier le type List <Product>

J'ai le code suivant:

List<Product> product = new List<Product>();

L'erreur:

Cannot instantiate the type List<Product>

Product est une entité de mon projet EJB. Pourquoi je reçois cette erreur?

98
Emanuel

List est une interface . Les interfaces ne peuvent pas être instanciées. Seuls les types concrets peuvent être instanciés. Vous voudrez probablement utiliser un ArrayList , qui est une implémentation du List interface.

List<Product> products = new ArrayList<Product>();
182
Matt Ball

Utilisez un type de liste concret, par exemple ArrayList au lieu de List.

17
Mike Samuel

La liste est une interface. Vous avez besoin d'une classe spécifique à la fin alors essayez soit

List l = new ArrayList();

ou

List l = new LinkedList();

Selon ce qui convient à vos besoins.

15
Mechkov

La liste peut être instanciée par n'importe quelle classe implémentant l'interface. De cette manière, Java nous fournit un comportement polymorphe.Voir l'exemple ci-dessous:

List<String> list = new ArrayList<String>();

Au lieu d'instancier directement un ArrayList, j'utilise une liste pour faire référence à un objet ArrayList, de sorte que nous n'utilisons que les méthodes d'interface List et que nous ne nous préoccupions pas de son implémentation réelle.

ArrayList, LinkedList, Vector sont des exemples de classes implémentant List. Vous souhaitez probablement créer une liste en fonction de vos besoins.

Exemple: - une LinkedList est plus utile lorsque vous devez effectuer un certain nombre d’insertions ou de suppressions. Arraylist est plus gourmand en performances car il est soutenu par un tableau de taille fixe et son contenu doit être modifié en déplaçant ou en repandant le tableau.

Encore une fois, en utilisant une liste, nous pouvons simplement changer notre instanciation d'objet sans changer de code plus loin dans vos programmes.

Supposons que nous utilisions ArrayList<String> value = new ArrayList<String>();

nous pouvons utiliser une méthode spécifique de ArrrayList et le code de sortie ne sera pas robuste

En utilisant List<String> value = new ArrayList<String>();

nous nous assurons d'utiliser uniquement les méthodes d'interface List. et si nous voulons le changer en LinkedList, nous devons simplement changer le code:

List<String> value = new ArrayList<String>(); 

------ votre code utilise des méthodes d'interface List .....

value = new LinkedList<String>(); 

----- votre code utilise toujours les méthodes d'interface List et nous n'avons rien à changer ---- et nous n'avons rien à modifier dans notre code

Au fait, une LinkedList fonctionne aussi avec une Deque qui, évidemment, ne peut pas non plus être instanciée car c’est aussi une interface.

8
Tech Geek

Les interfaces ne peuvent pas être directement instanciées, vous devez instancier les classes qui implémentent de telles interfaces.

Essaye ça:

NameValuePair[] params = new BasicNameValuePair[] {
        new BasicNameValuePair("param1", param1),
        new BasicNameValuePair("param2", param2),
};
1
pancho.gb.cu