小编典典

List和有什么不一样和清单?

java

关于 Java泛型, 我有一个非常基本的问题。我想这两个List<Number>List<? extends Number>是同质的。我是对的还是我缺少的基本观念?


阅读 225

收藏
2020-09-21

共1个答案

小编典典

泛型类型比较古怪。

<? extends Number>表示Number或未知的子类。如果获得这样的值,它将是Number,但是由于您不知道哪个有效,因此无法给出此类型的值。

区别在于参数和返回值。

List<Number> numbers = new ArrayList<Number>();
Number n = 1;
numbers.add(n); // ok.
n = numbers.get(0); // ok
numbers.add(1); // ok.

List<? extends Number> numbers2 = new ArrayList<Double>();
numbers2.add(n); // not ok
n = numbers2.get(0); // ok

List<? super Number> numbers3 = new ArrayList<Serializable>();
numbers3.add(n); // ok
n = numbers3.get(0); // not ok.

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

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

public static <T> void sort(List<T> list, Comparator<? super T> c)

这意味着你可以

Comparator<Number> comparesAnyNumbers = ...
List<Integer> ints = ...
Collections.sort(ints, comparesAnyNumbers);
2020-09-21