泛型的基本应用、内部原理及更深应用
1. jdk1.5以前的集合类中存在什么问题
a) ArrayLIst collection = new ArrayList();
collectin.add(1);
collection.add(1L);
collection.add(“abc”);
int I = (Integer)ArrayList.get(1); //编译器强制类型转换且运行时出错
2. jdk1.5的集合类希望你在定义集合时,明确规定表示你要向集合中装哪种类型的数据,无法加入指定类型以外的数据;
a) ArrayList<Integer> collection2 = new ArrayList<Integer>();
collection2.add(1);
collection2.add(1L); //error
collection2.add(“abc”); //error
int i2 = collection2.get(0); //利用泛型号,不需要强制转换了
3. 泛型号是提供给javac编译器使用的,可以限定集合中的输入类型,让编译器挡住源程序中的非法输入,编译器编译带类型说明的集合时会去除掉类型信息,使程序运行效率不受影响,对于参数化的类型,getClass()方法的返回值和原始类型完全一样。由于编译生成的字节码会去掉泛型的类型信息,只要能跳过编译器,就可以往某个泛型集合中加入其它类型的数据,例如,用拟向得到集合,再调用其add方法即可。
4. ArrarList<E> 类定义和ArrayList>Integer>类引用中涉及如下术语言:
b) 整个称为ArrayList<E>泛型类型
c) ArrayList<E>中的E称为类型变量或类型参数
d) ArrayList<Integer>称为参数化类型
e) ArrayList<Integer>中的Integer称为类型参数的实例或实际类型参数
f) ArrayList<Integer>中的<>念typeof
g) ArrayList称为原始类型
5. 参数化类型与原始类型的兼容性:
h) 参数化类型可以引用一个原始类型的对象,编译器给予警告,例如:
Collection<String> c = new Vector();
i) 原始类型可以引用一个参数化的类型对象,编译器给予警告,例如
Collection = new Vector<String>(); //原来的方法接受一个集合参数,新的类型也要能传进去。
6. 参数化类型不考虑类型参数的继承关系:
j) Vector<String> v = new Vector<object>();//error
k) Vector<Object> v = new Vector<String>(); //error to
7.在创建数组实例时,数组的元素不能使用参数化的类型,例如,下面的语句有错误:
Vector<Integer> vectorList[] = new Vector<Integer>[10];
8.下面的代码会报错吗? 一看会,实际却不会,编译器是一行一行检查的
Vector v1 = new Vector<String>(); Vector<Object> v = v1;
泛型的通配符扩展应用
A. 限定通配符的上边界://上边界为Number
a) 正确:Vector<? extends Number> x = new Vector<Integer>();
错误:Vector<? extends Number> x = new Vector<String>();
B. 限定通配符的下边界 // 下边界为Integer
正确:Vector<? super Integer> x = new Vector<Number>();
错误:Vector<? super Integer> x = new Vector<Byte>();
综合实例代码:
分享到:
相关推荐
本课程为传智播客《张孝祥Java高新技术》视频教程,教程采用的AVI方式发布,所以看起来很流畅,大家可以通过本套视频第一集包中附带的CamPlay.exe(拖入即可)观看和学习。
一个泛型集合的应用,主要讲的dictionary,obj>的应用
《c++泛型stl原理和应用》全部例题源码哟 全部手工写入并作了一些修改
网上很多讲泛型原理的文章, 很少有提到我们什么时候使用泛型有优势, 我就泛型类和方法搞了两个实例,算是探索下泛型使用的冰山一角吧,在我博客里面有配套的文章,可以配套看.
收藏了枚举和泛型的一些具体的应用实例,希望能给大家更多的帮助!
Delphi中的泛型基础及简单应用
Python中泛型函数应用案例.pdf
集合了C++多重泛型应用实例,让初学者能够了解泛型编程的魅力,为学好C++ 打下良好基础。
c# 泛型应用实例, c#(vs2008)
通过泛型可以定义类型安全类,而不会损害类型安全、性能或工作效率
此实例代码大部分从网上整理而来,因为近期感觉泛型、集合等在ASP.NET web项目中开发还是比较重要的,对提高系统情能很有帮助。
泛型技术介绍及应用. 泛型技术介绍及应用
泛型类、泛型方法、泛型接口、泛型委托 泛型类、泛型方法、泛型接口、泛型委托
Python中泛型函数应用案例
泛型集合与数组应用老师找学生 泛型集合 数组应用 老师找学生 C# 北大青鸟高老师
Java源代码带两个类型参数的泛型的应用.rar
泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...