无法实例化类型List <product> </product>

时间:2011-10-31 21:48:21

标签: java list initialization ejb

我有以下代码:

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

错误:

Cannot instantiate the type List<Product>

Product是我的EJB项目中的一个实体。为什么我收到这个错误?

5 个答案:

答案 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),
};