Java泛型略深入总结
2019-04-30 本文已影响0人
qichanna
首先说一个概念,Object是String的父类,但是List<Object>不是List<String>的父类,如下代码
List<Object> a1 = new ArrayList<>();
List<String> a2 = new ArrayList<>();
a1.add(a2.get(0));
类似以上这样的代码是不可以的,因为他们不是父类与子类的关系,那要怎样才能表示集合泛型的父类与子类的关系呢,看如下代码:
通配符上限extends
List<? extends T> list1;
List<T> list2
list2.add(list1.get(0));
以上代码是可以的,因为可以确定list1是T的子类(或T),所以可以添加到list2中,list1.get方法能被赋值给T或者Object,list.add方法不能使用,因为无法确定list1的具体类型,只能知道是T的子类。
同理通配符下限super也可以这样:
List<? super T> list1;
List<T> list2
list1.add(list2.get(0));
因为list1可以确定是list2的超类,所以list2可以被添加到list1中,list2.add方法能用,但是list1.get方法不能使用,因为list1是T的超类,除了object可以被赋值,其他没有类型可以确定。