操作 Java 泛型(三):泛型在继承方面体现与通配符使用
2021/5/23 20:29:03
本文主要是介绍操作 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 泛型(三):泛型在继承方面体现与通配符使用的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-28微服务架构中API版本控制的实践
- 2024-09-28AI给的和自己写的Python代码,都无法改变输入框的内容,替换也不行
- 2024-09-27Sentinel配置限流资料:新手入门教程
- 2024-09-27Sentinel配置限流资料详解
- 2024-09-27Sentinel限流资料:新手入门教程
- 2024-09-26Sentinel限流资料入门详解
- 2024-09-26Springboot框架资料:初学者入门教程
- 2024-09-26Springboot框架资料详解:新手入门教程
- 2024-09-26Springboot企业级开发资料:新手入门指南
- 2024-09-26SpringBoot企业级开发资料新手指南