尝试使用以下代码:
List<Integer> list = new List<Integer>();
我收到以下错误消息:
java.util.List
是抽象的;无法实例化
这是什么意思,为什么我不能像List
一样初始化ArrayList
?
答案 0 :(得分:166)
在Java中,List
是接口。也就是说,它无法直接实例化。
相反,您可以使用ArrayList
,它是该接口的一个实现,它使用数组作为其后备存储(因此名称)。
由于ArrayList
是一种List
,您可以轻松地将其翻译:
List<T> mylist = new ArrayList<T>();
这与.NET形成对比,从版本2.0开始,List<T>
是IList<T>
接口的默认实现。
答案 1 :(得分:28)
List
是一个接口,而不是具体的类
接口只是一个类可以实现的一组函数;实例化一个接口没有任何意义。
ArrayList
是一个具体的类,恰好实现了这个接口及其中的所有方法。
答案 2 :(得分:25)
使用List<Integer> list = new ArrayList<Integer>();
答案 3 :(得分:11)
List
是接口,而不是类,因此无法实例化。 ArrayList
很有可能是您追求的目标:
ArrayList<Integer> list = new ArrayList<Integer>();
Java中的接口实质上定义了类的蓝图 - 实现接口的类必须提供列表定义的方法的实现。但实际的实现完全取决于实现类,在这种情况下为ArrayList
。
JDK还提供了LinkedList
- 一种替代实现,它再次符合列表界面。它与下面的ArrayList
的工作方式非常不同,因此在列表中间添加/删除项目时效率更高,但对于绝大多数用例而言效率较低。当然,如果你想定义自己的实现,那么它是完全可能的!
简而言之,您无法创建列表,因为它是一个不包含具体代码的接口 - 这是实现该列表的类的工作,其中ArrayList
是迄今为止最常用的(并且具有良好的用途)原因!)
值得注意的是,在C#中,List
是一个类,而不是一个接口 - IList
。同样的原则适用于不同的名称。
答案 4 :(得分:4)
List
在Java中不是真实的东西。它是一个接口,一种定义允许对象与其他对象交互的方式。因此,它无法实例化。 ArrayList
是List
接口的实现,链接列表也是如此,依此类推。请改用它们。
答案 5 :(得分:3)
java中的List
是一个定义“列表”必须具有的某些特性的接口。特定列表实现(例如ArrayList
)实现此接口并充实各种方法的工作方式。你想用这个清单做什么?最有可能的是,其中一个内置列表适合您。