无法实例化类型 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&lt;String&gt; value = new ArrayList&lt;String&gt;();

我们可能会使用 ArrayList 的特定方法,并且输出的代码不会健壮

通过使用List&lt;String&gt; value = new ArrayList&lt;String&gt;();

我们确保只使用 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> [重复]的主要内容,如果未能解决你的问题,请参考以下文章

带有非类型参数的奇怪模板实例化错误

list集合方法的使用

如何通过使用类型名称来实例化泛型类?

Flutter/Dart - “List<dynamic>”不是“List<Product>”类型的子类型

无法实例化类型 Set

Java中LinkedList类为何无法用List接口引用来实例化