操作 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、泛型在继承上的体现

    如果BA的一个子类型(子类或者子接口),而G是具有泛型声明的类或接口, G<B>并不是G<A>的子类型!

    比如: StringObject的子类,但是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 泛型:泛型在继承方面体现与通配符使用的主要内容,如果未能解决你的问题,请参考以下文章

Java_泛型笔记

尚硅谷_Java零基础教程(泛型generics)-- 学习笔记

java5 特性 泛型

Java泛型用法

Java泛型用法

Java泛型中通配符的使用