Java泛型略深入总结

首先说一个概念,Object是String的父类,但是List不是List的父类,如下代码

List a1 = new ArrayList<>(); 
List a2 = new ArrayList<>();
a1.add(a2.get(0));

类似以上这样的代码是不可以的,因为他们不是父类与子类的关系,那要怎样才能表示集合泛型的父类与子类的关系呢,看如下代码:

通配符上限extends

List list1;
List list2
list2.add(list1.get(0));

以上代码是可以的,因为可以确定list1是T的子类(或T),所以可以添加到list2中,list1.get方法能被赋值给T或者Object,list.add方法不能使用,因为无法确定list1的具体类型,只能知道是T的子类。

同理通配符下限super也可以这样:

List list1;
List list2
list1.add(list2.get(0));

因为list1可以确定是list2的超类,所以list2可以被添加到list1中,list2.add方法能用,但是list1.get方法不能使用,因为list1是T的超类,除了object可以被赋值,其他没有类型可以确定。

你可能感兴趣的:(Java泛型略深入总结)