【发布时间】:2023-03-30 14:26:01
【问题描述】:
尝试使用以下代码:
List<Integer> list = new List<Integer>();
我收到以下错误消息:
java.util.List是抽象的;无法实例化
这是什么意思,为什么我不能像初始化 ArrayList 一样初始化 List?
【问题讨论】:
尝试使用以下代码:
List<Integer> list = new List<Integer>();
我收到以下错误消息:
java.util.List是抽象的;无法实例化
这是什么意思,为什么我不能像初始化 ArrayList 一样初始化 List?
【问题讨论】:
在 Java 中,List 是一个接口。也就是不能直接实例化。
相反,您可以使用ArrayList,它是该接口的一个实现,它使用数组作为其后备存储(因此得名)。
由于ArrayList是List的一种,你可以轻松上载它:
List<T> mylist = new ArrayList<T>();
这与 .NET 不同,从 2.0 版开始,List<T> 是 IList<T> 接口的默认实现。
【讨论】:
List 是一个接口,而不是一个具体的类。
接口只是一个类可以实现的一组功能;实例化接口没有任何意义。
ArrayList 是一个具体的类,恰好实现了这个接口及其中的所有方法。
【讨论】:
使用List<Integer> list = new ArrayList<Integer>();
【讨论】:
List 是接口,不是类,因此无法实例化。 ArrayList 很可能是您所追求的:
ArrayList<Integer> list = new ArrayList<Integer>();
Java 中的接口本质上定义了类的蓝图——实现接口的类必须提供列表定义的方法的实现。但实际的实现完全取决于实现类,在这种情况下为ArrayList。
JDK 还提供了LinkedList - 另一个符合列表接口的替代实现。它的工作方式与下面的ArrayList 非常不同,因此它在列表中途添加/删除项目时往往更有效,但对于绝大多数用例来说,它的效率较低。当然,如果您想定义自己的实现,这是完全可能的!
简而言之,您不能创建一个列表,因为它是一个不包含具体代码的接口——这是实现该列表的类的工作,其中ArrayList 是迄今为止使用最多的(而且有充分的理由! )
还值得注意的是,在 C# 中,List 是一个类,而不是一个接口 - 那是 IList。但同样的原则也适用,只是名称不同。
【讨论】:
new ArrayList :)
List 在 Java 中不是真实存在的。它是一个接口,一种定义对象如何与其他对象交互的方式。因此,它永远不能被实例化。 ArrayList 是 List 接口的实现,链表也是如此,等等。改用这些。
【讨论】:
Java 中的List 是一个接口,它定义了“列表”必须具备的某些品质。具体的列表实现,例如ArrayList 实现了这个接口并充实了各种方法的工作方式。你想用这个列表来完成什么?很可能,其中一个内置列表适合您。
【讨论】: