List 和List ?

我有一个关于Javagenerics的非常基本的问题。 我认为ListList List是同质的。 我是对的还是有一些我缺少的基础?

通用类型更迂腐。

表示Number或未知的子类。 如果你获得这样的值,它将是一个Number ,但你不能给出这种类型的值,因为你不知道哪个是有效的。

不同之处在于参数和返回值。

 List numbers = new ArrayList(); Number n = 1; numbers.add(n); // ok. n = numbers.get(0); // ok numbers.add(1); // ok. List numbers2 = new ArrayList(); numbers2.add(n); // not ok n = numbers2.get(0); // ok List numbers3 = new ArrayList(); numbers3.add(n); // ok n = numbers3.get(0); // not ok. 

super在一些地方用来表示类型可以是超类型。 例如

在集合中,此方法表示比较器需要能够比较相同类型或任何超类型。

 public static  void sort(List list, Comparator c) 

这意味着你可以拥有

 Comparator comparesAnyNumbers = ... List ints = ... Collections.sort(ints, comparesAnyNumbers); 

generics是编译时语言的特性,意味着它们在运行时不存在。 在通用机制中,对于编译时检查,它们不是同类的,即如果要在generics类型中使用多态。

下面给出了编译时错误,虽然它似乎是一个有效的定义:

  List list = new ArrayList (); 

  List list = new ArrayList (); 

已validation。 而且,您不能在右侧使用通配符类型:

  List list = new ArrayList (); 

不会被编译。

List – > Number列表(或Number实例)

List List – >列出任何扩展Number类型