目录
一、泛型概念
二、泛型的语法
1、语法
2、实例化
4、泛型如何编译
5、泛型的上界
6、泛型方法
三、通配符
1、使用场景
2、使用
3、通配符的上下界
一、泛型概念
泛型就是适用于许多许多类型,是在jdk1.5引入的
二、泛型的语法
1、语法
class 类名<T1,T2,……Tn>{
……
}
要注意的是<>里的类型不参与类型的组成,但是会参与类型的检查
2、实例化
在实例化泛型类时:
类名<类型> 对象名= new 泛型类<类型>(构造方法)
泛型类可以自动进行类型的检查与类型的转换
4、泛型如何编译
在程序运行时,其实没有泛型这个概念,在编译时才有这个概念,那么在程序运行时,泛型到底是怎样存在的,在运行时,擦除机制会把泛型T擦为Object,所有的T在字节码文件是Object类型的数据
5、泛型的上界
class 类名<T extends 上界>{
}
泛型此时进行类类型传入时只能传入的是上界或者继承了上界的上界的子类,而此时擦除机制会把他擦除为上界类型
6、泛型方法
语法:方法修饰限定符<T> 返回值 方法名(形参列表){
方法体
}
此时实现Comparable或者Comparator接口,所以以这两个比较接口其中一个为上界
三、通配符
1、使用场景
如果泛型类作为函数形参时此时泛型只能传入一个确定的类型,比如定义函数时泛型类型为String但是后续操作传入的是Integer类型,就会导致类型不匹配,此时就可以使用通配符
2、使用
上述问题可以使用通配符解决,如下
3、通配符的上下界
上界:<? extends 上界类型>
此时可以传入的是上界类型或者上界类的子类
下界:<?super 下界类型>
此时可以传入的是下界类型与他的父类