黑马程序-泛型高级应用-向上限定-向下限定
2015-01-16 15:36
113 查看
------<a href="http://www.itheima.com" target="blank">Java培训、Android培训、iOS培训、.Net培训</a>、期待与您交流! -------
泛型高级应用:
? 占位符 || 通配符
概念:当集合不确定将要接收什么类型的对象时,使用“?”作为接收未来传递来的对象的通配符。
? 占位符 || 通配符
格式:Collection<?> ... ...
缺点:不能使用对象的特有方法,这一点就是面向接口编程的缺点,可以通过强制转换来使用具体对象的特有方法。
注意:在初始化泛型的集合时,引用类型和初始化类型需要保持一致。而不能像
如:ArrayList<Animal> al = new ArrayList<Dog>();
原因:在实例化时,声明了存放的内容为Dog,而声明类型是Animal。从多肽的角度来看,声明的al可以接收全部的Animal子类,但是在泛型的概念中,此集合只能接收Dog,所以存放其他Animal的子类,就会造成类型安全问题。
解决方法:左右的类型保持一致。
泛型限定
1. 向上限定
定义:? extends E : 只能存储E,或E的子类。
添加:以List的add方法为例。
2. 向下限定
定义:? super E : 只能存储E,或E的父类。
比较:以TreeSet的比较器为例。
泛型高级应用:
? 占位符 || 通配符
概念:当集合不确定将要接收什么类型的对象时,使用“?”作为接收未来传递来的对象的通配符。
? 占位符 || 通配符
格式:Collection<?> ... ...
缺点:不能使用对象的特有方法,这一点就是面向接口编程的缺点,可以通过强制转换来使用具体对象的特有方法。
package com.lxh.collection; import java.util.*; public class AdvancedGeneric { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add("aa1"); al.add("aa2"); al.add("aa3"); AdvancedGeneric.printIterator(al); ArrayList al2 = new ArrayList(); al2.add(3); al2.add(4); al2.add(6); AdvancedGeneric.printIterator(al2); } /** * 通配符方式。 * 缺点:不能使用对象中元素的特有方法了。 * */ public static void printIterator(ArrayList<?> al) { Iterator it = al.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } /** * 泛型方式 * 缺点:不能使用对象中元素的特有方法了。 * */ public static void printIterator2(ArrayList al) { Iterator it = al.iterator(); T t = it.next(); System.out.println(t); } }
注意:在初始化泛型的集合时,引用类型和初始化类型需要保持一致。而不能像
如:ArrayList<Animal> al = new ArrayList<Dog>();
原因:在实例化时,声明了存放的内容为Dog,而声明类型是Animal。从多肽的角度来看,声明的al可以接收全部的Animal子类,但是在泛型的概念中,此集合只能接收Dog,所以存放其他Animal的子类,就会造成类型安全问题。
解决方法:左右的类型保持一致。
泛型限定
1. 向上限定
定义:? extends E : 只能存储E,或E的子类。
添加:以List的add方法为例。
package com.lxh.collection; import java.util.*; public class AdvancedGeneric { public static void main(String[] args) { ArrayList al = new ArrayList(); al.add(new SuperMan("张三",23)); al.add(new SuperMan("张四",24)); al.add(new SuperMan("张五",25)); al.add(new SuperMan("张三",23)); AdvancedGeneric.printIterator(al); TreeSet ts = new TreeSet(); ts.add(new SuperMan("张三",23)); ts.add(new SuperMan("张四",24)); ts.add(new SuperMan("张五",25)); ts.add(new SuperMan("张三",23)); AdvancedGeneric.printIterator(ts); } /** * 通配符方式。 * 缺点:不能使用对象中元素的特有方法了。 * */ public static void printIterator(Collection<? extends Man> al) { Iterator<? extends Man> it = al.iterator(); while(it.hasNext()) { Man m = it.next(); System.out.println(m.getName()); } } }
2. 向下限定
定义:? super E : 只能存储E,或E的父类。
比较:以TreeSet的比较器为例。
相关文章推荐
- 【JAVA编程】泛型高级应用之泛型限定
- [转]PHP程序开发范例宝典 -- 第9章 MySQL高级应用技术
- [转]PHP程序开发范例宝典 -- 第9章 MySQL高级应用技术
- Java基础---Java---基础加强---内省的简单运用、注解的定义与反射调用、 自定义注解及其应用、泛型及泛型的高级应用、泛型集合的综合
- Android 从硬件到应用:一步一步向上爬 2 -- 运行 C 程序测试硬件驱动
- JAVA中的向下转型(downcasting)及泛型与向上转型(upcasting)及RTTI、反射机制
- 《windows应用高级编程-C#编程篇》书中程序的小问题及改进
- Java基础 泛型限定的应用
- 泛型(Generic):了解泛型、泛型的应用、?通配符和泛型的限定、泛型方法和类型推断、泛型类、用反射获得实际
- 限定泛型可用类型的相关应用
- 【TreeSet】的应用及【泛型】高级应用总结
- 向上转型,向下转型和泛型
- 程序中泛型的应用(一个小例子 经测试 正常)
- 【EntityFramework系列教程十,翻译】ASP.NET MVC程序中的一些高级应用
- 图形学基础教程10--高级应用 (带演示程序)
- 高级IO复用应用:聊天室程序
- [转]PHP程序开发范例宝典 -- 第9章 MySQL高级应用技术
- 高级应用Magento-订单创建流程及程序代码
- 高级应用:通过反射获得泛型的参数…
- 写出一个程序,接受一个浮点数值,输出该数值的近似整数值。如果小数点后数值大于等于5,向上取整;小于5,则向下取整