我有以下代码:
List<Product> product = new List<Product>();
错误:
Cannot instantiate the type List<Product>
Product
是我的EJB项目中的一个实体。为什么我收到这个错误?
答案 0 :(得分:178)
List
is an interface。接口无法实例化。只能实例化具体类型。您可能希望使用ArrayList
,这是List
接口的实现。
List<Product> products = new ArrayList<Product>();
答案 1 :(得分:16)
使用具体的列表类型,例如ArrayList
而非List
。
答案 2 :(得分:14)
列表是一个界面。最后你需要一个特定的类 要么尝试
List l = new ArrayList();
或
List l = new LinkedList();
满足您的需求。
答案 3 :(得分:8)
列表可以由实现接口的任何类实例化。通过这种方式,Java为我们提供了多态行为。参见下面的示例:
List<String> list = new ArrayList<String>();
我没有直接实例化ArrayList,而是使用List来引用ArrayList对象,这样我们只使用List接口方法,而不关心它的实际实现。
实现List的类的示例是ArrayList,LinkedList,Vector。您可能希望根据您的要求创建List。
示例: - 当你做一些惯性或删除时,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>();
-----你的代码仍然使用List接口方法,我们不需要改变任何东西---- 我们不必在代码中进一步改变任何内容
顺便说一下,LinkedList也可以使用Deque,显然你也无法实例化,因为它也是一个接口
答案 4 :(得分:1)
无法直接实例化接口,您应该实例化实现此类接口的类。
试试这个:
NameValuePair[] params = new BasicNameValuePair[] {
new BasicNameValuePair("param1", param1),
new BasicNameValuePair("param2", param2),
};