无法实例化类型 List<Product> [重复]
Posted
技术标签:
【中文标题】无法实例化类型 List<Product> [重复]【英文标题】:Cannot instantiate the type List<Product> [duplicate] 【发布时间】:2011-12-19 02:19:28 【问题描述】:我有以下代码:
List<Product> product = new List<Product>();
错误:
Cannot instantiate the type List<Product>
Product
是我的 EJB 项目中的一个实体。为什么会出现此错误?
【问题讨论】:
很高兴有人问这个问题。作为一名从 c# 转向 java 的开发人员,目前还不清楚 list 是这种语言的接口。 @SouthShoreAK 如果你是read the documentation:)
在使用列表之前需要阅读文档只不过是设计不佳的标志。
【参考方案1】:
List
is an interface。接口不能被实例化。只能实例化具体类型。您可能想要使用ArrayList
,它是List
接口的实现。
List<Product> products = new ArrayList<Product>();
【讨论】:
【参考方案2】:使用具体的列表类型,例如ArrayList
而不仅仅是 List
。
【讨论】:
【参考方案3】:列表是一个接口。你最终需要一个特定的课程,所以 要么试试
List l = new ArrayList();
或
List l = new LinkedList();
满足您的需求。
【讨论】:
我们可以做到这两种方式不能吗?我只是在回答这个问题。实际上是答案之一。 原始集合类型是危险的,不应使用或建议在任何针对 Java 5+ 的新代码中使用,故事结束。 应该避免,是的。那么预泛型 Java 应用程序呢?底线是有两种方法可以实例化这种语句,它们都是有效的。还有一个问题是尽可能使用哪个。这就是泛型。 @Matt Ball 好吧,让它死吧。我们必须涵盖所有方面。问候! 做不到。它返回错误“泛型类的类型缺少参数”【参考方案4】:List可以被任何实现该接口的类实例化。通过这种方式,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>();
我们可能会使用 ArrayList 的特定方法,并且输出的代码不会健壮
通过使用List<String> value = new ArrayList<String>();
我们确保只使用 List 接口方法。如果我们想将其更改为 LinkedList,我们只需更改代码:
List<String> value = new ArrayList<String>();
------你的代码使用 List 接口方法.....
value = new LinkedList<String>();
-----您的代码仍然使用 List 接口方法,我们无需更改任何内容---- 而且我们不必进一步更改代码中的任何内容
顺便说一句,LinkedList 也适用于 Deque,显然你也不能实例化它,因为它也是一个接口
【讨论】:
这被称为“编程到接口”设计模式。【参考方案5】:接口不能直接实例化,你应该实例化实现此类接口的类。
试试这个:
NameValuePair[] params = new BasicNameValuePair[]
new BasicNameValuePair("param1", param1),
new BasicNameValuePair("param2", param2),
;
【讨论】:
以上是关于无法实例化类型 List<Product> [重复]的主要内容,如果未能解决你的问题,请参考以下文章