泛型程序设计(1)
一:为什么要使用泛型程序设计java se 5.0之前,java泛型程序设计是通过继承来实现的,像arraylist就是通过维护object引用的数组。但是这样会带来两个问题。一是:获取一个值时必须进行强制类型转换。二是:没有错误检查,什么类型的值都能添加到数组列表中。
因而,泛型就提供了“类型参数”来指定元素的类型:
ArrayList<String> files=new ArrayList<String>();
这样不仅使代码具有更好的可读性,同时:编译器也可以很好的利用这个信息,读取时避免强制类型转化。插入时避免了错误类型的检查。
二:泛型类的设计
泛型类就是拥有一个或多个类型变量的类。
例如:public class Pair<T>{}或public class Pair<T,U>{}
使用时直接用具体的类型替换类型变量就可以实例化类型了。
例如:Pair<String>
三:泛型方法
泛型方法是在定义方法时,在修饰符的后面,返回类型的前面添加类型变量。
例如:pubic static <T>T getMiddle(T[]a)
类型方法可以定义在普通类和泛型类中。
调用时在方法名前的"<>"中放入具体的类型(也可以省略由编译器识别具体类型)。
四:类型变量的限定
类型变量的限定就是限定类型变量实现了什么接口以具体的实现具体的操作要求,例如,要实现两类型的字典比较,则类型变量必须实现了接口comparable接口。
实现方式:<T extends Comparable>
可以实现多个限定,用&分隔:<T extends Comparable&Serializable>
五:泛型代码和虚拟机
对于虚拟机来说没有泛型类型对象,所有的对象都是普通类,此时,对于所有的泛型类型,都自动的提供一个相应的原始类型,即搽除类型变量,并替换为限定类型(无限定类型的时候换成object)。
在有多个限定类型时,替换成第一个限定类型。
由于搽除,在翻译泛型表达式和泛型方法时编译器将插入强制类型装换。
页:
[1]