一.什么是泛型
java 泛型(generics)是 JDK 5 中引入的一个新特性, 泛型提供了编译时类型安全检测机制,该机制允许程序员在编译时检测到非法的类型。泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。
public static void main(String[] args) throws Exception {
List<Integer> list = new ArrayList<>();
list.add(12);
//这里直接添加会报错
//list.add("qq");
Class<? extends List> clazz = list.getClass();
Method add = clazz.getDeclaredMethod("add", Object.class);
//但是通过反射添加,是可以的
add.invoke(list,"k1");
System.out.println(list);
}
结果:
泛型一般有三种使用方式:泛型类、泛型接口、泛型方法
二.常用的通配符
常用的通配符为: T,E,K,V,?
- ?表示不确定的 java 类型
- T (type) 表示具体的一个 java 类型
- K V (key value) 分别代表 java 键值中的 Key Value
- E (element) 代表 Element
三.上限和下限通配符
- <? extends E> 上限通配符,用来限制类型的上限
- <? super E> 下限通配符,用来限制类型的下限
- 注意了,此处’?’是类型实参,而不是类型形参 。可以解决当具体类型不确定的时候,这个通配符就是 ?
四.什么是泛型擦除
所谓的泛型擦除,官方名叫“类型擦除”。Java 的泛型是伪泛型,这是因为 Java 在编译期间,所有的类型信息都会被擦掉。也就是说,在运行的时候是没有泛型的。