List vs ArrayList

时间:2011-10-11 12:55:49

标签: java generics

List<EventHandler<E>> listeners = new List<EventHandler<E>>();

为什么上面的行失败了:

  

无法实例化类型List<EventHandler<E>>

但是这个有效:

ArrayList<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>();

6 个答案:

答案 0 :(得分:28)

正确的方法是:

List<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>();
  • 通过其界面(List
  • 引用对象
  • 使用其具体类型(ArrayList)实例化对象(接口无法实例化)

答案 1 :(得分:15)

List是一个接口,您无法实例化接口。

答案 2 :(得分:6)

列表是一个接口,您无法创建接口的实例

List<EventHandler<E>> listeners = new ArrayList<EventHandler<E>>();

答案 3 :(得分:2)

List<T>interface,因此您无法在ArrayList<T>concrete类的情况下对其进行实例化,List<T>类是{{1}}的实现。

答案 4 :(得分:1)

List只是一个由ArrayList

实现的接口

请参阅:http://download.oracle.com/javase/6/docs/api/java/util/List.html

答案 5 :(得分:1)

列表无法实例化,因为它只是一个接口。

但是,您可能还有其他问题。

你真的有一个名为'E'的班级吗?如果你这样做,那么你应该没有充分的理由。

E和T等单个字母几乎专门用于表示泛型类型参数。阅读它:“这是关于如何创建类或方法的一般描述,没有任何特定类型的引用 - 您可以通过任何合法的引用类型参数化该类”。

所以即使像ArrayList < T >这样的类也无法实例化 - 因为它们是类的通用“配方”,而不是真正的具体类。