操作 Java 泛型:泛型在继承方面体现与通配符使用
Posted 格物致知_Tony
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了操作 Java 泛型:泛型在继承方面体现与通配符使用相关的知识,希望对你有一定的参考价值。
一、泛型在继承上的体现
1、先看两段代码有何不同
片段1:
1 public void printCollection(Collection c) {
2 Iterator i = c.iterator();
3 for (int k = 0; k < c.size(); k++) {
4 System.out.println(i.next());
5 }
6 }
片段2:
1 public void printCollection(Collection<Object> c) {
2 for (Object e : c) {
3 System.out.println(e);
4 }
5 }
2、泛型在继承上的体现
如果B是A的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口, G<B>并不是G<A>的子类型!
比如: String是Object的子类,但是List<String >并不是List<Object>的子类。
但是:如果类 A 是类 B的父类,A<G> 是 B<G> 的父类。
3、代码体验
实验一:
1 @Test
2 public void test(){
3
4 Object obj = null;
5 String str = null;
6 obj = str;
7
8 Object[] arr1 = null;
9 String[] arr2 = null;
10 arr1 = arr2;
11
12
13 //编译不通过
14 //Date date = new Date();
15 //str = date;
16
17
18 List<Object> list1 = null;
19 List<String> list2 = new ArrayList<String>();
20 //此时的list1和list2的类型不具有子父类关系
21 //编译不通过
22 //list1 = list2;
23
24 }
实验二:
1 public void testGenericAndSubClass() {
2 Person[] persons = null;
3 Man[] mans = null;
4 // 而 Person[] 是 Man[] 的父类.
5 persons = mans;
6
7 Person p = mans[0];
8
9
10 // 在泛型的集合上
11 List<Person> personList = null;
12 List<Man> manList = null;
13 // personList = manList;(报错)
14 }
实验三:
1 public void test(){
2
3 AbstractList<String> list1 = null;
4 List<String> list2 = null;
5 ArrayList<String> list3 = null;
6
7 list1 = list3;
8 list2 = list3;
9
10 List<String> list4 = new ArrayList<>();
11
12 }
4、
5、
二、
三、
四、
五、
以上是关于操作 Java 泛型:泛型在继承方面体现与通配符使用的主要内容,如果未能解决你的问题,请参考以下文章