泛型
1.为什么需要有泛型?(泛型的引入)
没有泛型之前的做法是使用Object接受任意类型,这样在向下转型的过程中会出现类型转换异常,类型转换异常我们可以使用instanceof关键字做判断,但是这样对于集合的遍历来说没有遍历完全,因为集合的特点是能够存储所有的引用类型,而我们知道Object有无数个子类,我们无法对每一个子类做逐一判断,所以安全隐患永远存在,如果不逐一判断,没有安全问题但是不能够完全遍历,所以针对这个问题,JAVA在JDK1.5之后引入了泛型。
2.泛型的设计思想
设计思路:让集合值能够存储一种类型,但是集合能够存储Object任意类型
数组:数组存储相同类型的一组连续的变量
集合就是模仿数组在编译的时候确定类型
参数化类型模仿的是方法
3.泛型的概述
泛型是JDK1.5之后引入一种在编译时期确定类型的参数化类型
public String add(Integer a, String b) {
String sum = a + b ;
system.out.println(a);
system.out.println(b);
system.out.println(sum);
return sum;
}
4.泛型的格式
<E , H , T>
a.这里的E(A~Z)必须是引用类型,如果是基本类型,可以考虑包装类类型
b.这里的参数可以有多个
5.泛型的好处
a.消除了黄色警告线,提高了程序的安全性,避免了类型转换异常
b.提高了性能
c.提高了程序的可读性
d.提高了可扩展性和可维护性
e.简化代码
泛型的应用
泛型分类:
泛型类
泛型方法
泛型接口
泛型限定符
泛型类
泛型接口
泛型接口:把泛型定义在接口上
1.在实现接口的时候确定类型
2.在实现接口的时候不确定类型
3.匿名内部类的方式确定类型
泛型方法
泛型方法:把泛型声明在方法上
泛型方法的格式:在方法的声明上添加
注意:
1.泛型方法独立于泛型类或者泛型接口
2.泛型声明可以有多个泛型类型
3.泛型的方法调用的时候确定类型
泛型方法的应用: toArray
泛型限定符
?:表示限定泛型的类型是任意类型
? extends E:表示限定泛型的类型是E或者是E的子类
? super E:表示限定泛型的类型是E或者是E的父类