У меня есть следующий код:
List<Product> product = new List<Product>();
Ошибка:
Cannot instantiate the type List<Product>
Product
- это Entity в моем проекте EJB. Почему я получаю эту ошибку?
У меня есть следующий код:
List<Product> product = new List<Product>();
Ошибка:
Cannot instantiate the type List<Product>
Product
- это Entity в моем проекте EJB. Почему я получаю эту ошибку?
List
- это интерфейс. Интерфейсы не могут быть созданы. Могут быть созданы только конкретные типы. Вероятно, вы захотите использовать ArrayList
, который является реализацией интерфейса List
.
List<Product> products = new ArrayList<Product>();
Используйте конкретный тип списка, например. ArrayList
вместо List
.
Список - это интерфейс. В конце вам нужен определенный класс, поэтому либо попробуйте
List l = new ArrayList();
или
List l = new LinkedList();
В зависимости от ваших потребностей.
Список может быть создан любым классом, реализующим интерфейс. Таким образом, Java предоставляет нам полиморфное поведение. См. Пример ниже:
List<String> list = new ArrayList<String>();
Вместо того, чтобы создавать экземпляр ArrayList напрямую, я использую List для ссылки на объект ArrayList, так что мы используем только методы интерфейса List и не заботимся о его реальной реализации.
Примерами классов, реализующих List, являются ArrayList, LinkedList, Vector. Возможно, вы захотите создать список в зависимости от ваших требований.
Пример: - LinkedList более полезен, когда вам нужно выполнить несколько операций инерции или удаления. Arraylist более требователен к производительности, так как он поддерживается массивом фиксированного размера, и содержимое массива необходимо изменять путем его перемещения или перераспределения.
Опять же, используя List, мы можем просто изменить наш экземпляр объекта без дальнейшего изменения кода в ваших программах.
Предположим, мы используем ArrayList<String> value = new ArrayList<String>();
мы можем использовать определенный метод ArrrayList, и наш код не будет надежным
Используя List<String> value = new ArrayList<String>();
мы проверяем, что мы используем только методы интерфейса List... и если мы хотим изменить его на LinkedList, нам просто нужно изменить код:
List<String> value = new ArrayList<String>();
------ ваш код использует методы интерфейса List.....
value = new LinkedList<String>();
Код -----your по-прежнему использует методы интерфейса List, и нам не нужно менять anything----, и нам не нужно ничего менять в нашем коде далее
Кстати, LinkedList также работает с Deque, который, очевидно, также нельзя создать, поскольку он также является интерфейсом.
Интерфейсы не могут быть напрямую созданы, вы должны создавать классы, реализующие такие интерфейсы.
Попробуйте следующее:
NameValuePair[] params = new BasicNameValuePair[] {
new BasicNameValuePair("param1", param1),
new BasicNameValuePair("param2", param2),
};