目录
泛型
什么是泛型
泛型的作用
泛型的使用方式
泛型擦除机制
为什么要进行泛型擦除,既然要擦除,为什么要使用泛型
桥方法
泛型有什么限制
通配符
什么是通配符
list和list的区别
上边界通配符,下边界通配符
详细原文输入密码 · 语雀
泛型
什么是泛型
泛型是JDK5引入的新特性
泛型的作用
泛型可以增强代码的可读性和稳定性
ArrayList<Student> list = new ArrayList<>();
例如这个就是用指定只能传入Student数据类型
泛型的使用方式
- 泛型类
public class A<T>{}
- 泛型接口
public interface A<T>{}
- 泛型方法
public static <E> void A(E[] array){}
泛型擦除机制
在Java编译期间,所有的泛型信息都会被擦除。
也就是说,编译器会将T类型全部都变成Object。这是为了减少虚拟机的开销
为什么要进行泛型擦除,既然要擦除,为什么要使用泛型
- 因为泛型可以在编译期间进行类型检测
- object类型需要强制转换,可能会导致一些错误
- 泛型可以使用自限定类型,如T extends Compaarable
桥方法
在继承泛型时,保持多态(自动生成,不是手写生成的)
泛型有什么限制
- 只能声明不能实例化T
- 不能用static修饰泛型变量
- 不能用Instance of和getClass()进行类型判断
- 不能实例化泛型数组
- 不能用基本类型来当泛型参数,只能用对应的引用类(因为基本数据类型不是Object的子类)
通配符
什么是通配符
可以允许参数类型的变化,用来解决泛型无法协变的问题
list<?>和list的区别
- list<?> list表示具有某种类型的List但不知道是哪一种,我们添加元素进去的时候会报错
- List list 表示list是持有元素类型是Object,可以添加任何类型对象
上边界通配符,下边界通配符
上边界通配符 extends 传入的类型实参必须是指定类型的子类型
下边界通配符super 传入的类型必须是指定类型的父类型