基本概念
简单来说,泛型使得程序具有了将逻辑(算法),和具体的数据类型分离的能力;也就是说,处理逻辑和具体的类型无关;
泛型可以应用于:
- 类
- 接口
- 方法:一个方法时否为泛型,和其所处的类是否为泛型没有关系
常见的T,就是类型参数,泛型就是处理的数据类型不是固定的,可以作为参数传入;
原理
在程序执行时,首先,由Java编译器将java文件编译为.class文件,然后由虚拟机加载并运行.class文件, 对于虚拟机而言,它是不知道泛型的;
对于泛型类,就是由编译器将泛型代码转化为普通代码,用的方法就是强制转化与类型擦除;
也就是先转换为Object,然后再插入必要的强制类型转换;
优势
根据上面的原理,可以知道泛型提供给了我们更好的安全性和可读性;我们无需再手动去转换类型了
类型参数
可以限定其上限为某个具体的类,接口或其他类型参数
如T extends Integer等
通配符
? extends Integer
两种关系:
- 通配符形式都可以用类型参数的形式进行取代
- 能用通配符的就用通配符(形式简单)
- 如果返回值依赖类型参数,或者需要写操作,只能用类型参数
- ? super T 用于灵活的写入或者比较,不能用类型参数形式取代
- ? extends T 用于灵活读取