一、泛型的概念
泛型是JDK1.5之后引入的新特性,是一种将元素的类型提前在编译时期确定,并且它是一种参数化类型的技术。
二、泛型的格式
< >里面可以是任意的字母,一般泛型类使用E,泛型方法使用T
这里只能够定义引用类型,不能够定义基本书类型
< >里面既可以定义一个泛型,也可以定义多个泛型
三、泛型的优点
泛型最大的优点就是实现了java程序的安全性。 泛型可以使编译器知道一个对象的限定类型是什么,即在编译时期就确定类型,
消除了强制类型转换带来的安全隐患,增加代码的可读性,提高的代码的重用率,减少了很多出错的机会。请看如下代码:
Collection c=newArrayList();
c.add("蜀国");
c.add("魏国");c.add("吴国");
c.add(15);c.add(1.5);
// 遍历集合
for(Iterator it=c.iterator();
it.hasNext();){Object oj=it.next();
// 访问子类每一个元素所特有的方法
String s=(String)oj;System.out.println("字符串的长度"+s.length());}
由于在集合中插入了不同类型的元素,运行程序后输出界面显示如下异常:
java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
通过对插入元素的类型做逐一判断并转型虽能解决上述异常,单需要使用大量if-else语句,大大降低了程序的可读性,且不利于扩展,此时如使用泛型就能很好的解决上面的问题,请看如下代码:
Collection<String>c=newArrayList<String>();//确定泛型类型<String>
c.add("蜀国");
c.add("魏国");
c.add("吴国");
// c.add(15); // 当确定泛型类型后,在编译时期就强制规定不允许添加其它类型的元素,否则编译报错
// c.add(1.5);
// c.add(new Student("1001", "张三", 30));
Iterator<String>it=c.iterator(); // 获取迭代器对象
while(it.hasNext()){ // 遍历集合
String s=it.next();
System.out.println(s+"|"+s.length());}
四、定义泛型
确定泛型的位置:
a 在实现类上确定泛型
b 在调用时确定泛型类型
c 使用匿名内部类确定泛型
3 泛型可以定义在方法上,这样的方法成为泛型方法,泛型方法有如下特点:
a 泛型方法独立于泛型类或者泛型接口
b 泛型方法在方法调用的时候确定类型
c 一个泛型接口或者泛型类中可以有多个泛型方法
d 一个泛型方法也可以定义多个泛型