一、泛型
1. 泛型概述
- 泛型的由来
- 当我们要接收一个参数的时候,但却不明确接收的参数的类型,这个时候就可以将参数类型设置为Object类型,这样子所有类型的参数都可以接收。
- 但是这样子做有一个问题,我们用Object类型的变量可以接收所有类型的对象,但是当我们要使用这个对象内部存储的数据时,需要手动将这个对象再次强转为它原来的类型,很麻烦。
- 这个时候就可以使用泛型,它可以自动识别参数的类型,确定返回值,不用再手动进行类型转换
- 泛型的定义
- 类型的明确工作不再是在定义的时候完成,而是交由创建对象或调用方法时去明确。也就是定义的时候并不知道是什么类型,在实际使用的时候再确定类型
- 格式
- <数据类型>
- 只能是引用的数据类型
- 可以定义在类、接口、方法、集合上
- 泛型的优点
- 将运行时期的类型选择问题提前到了编译期间
- 避免了类型的强制转换
- 优化程序设计,解决黄色警告
- 注:泛型只在编译期间存在,在运行期间泛型就擦除了
2. 泛型类
- 将泛型定义在类上面
- 定义格式
- public class 类名 <泛型类型…>
- 注意事项:泛型必须为引用类型
3. 泛型方法
- 将泛型定义在方法上
- 定义格式
- public <泛型类型…> 返回类型 方法名(泛型类型 变量名){方法体}
4. 泛型接口
- 将泛型定义在接口上
- 定义格式
- public interface 接口名<泛型类型…>
5. 泛型通配符
- <?>
- 任意类型
- <? extends E> + 向下限定,只限E及子类
- <? super E> + 向上限定,只限E及父类
- 泛型一经明确,则左右两边的类型要一致,且只能添加明确的类型的对象
向上限定,只限E及父类 - 泛型一经明确,则左右两边的类型要一致,且只能添加明确的类型的对象