泛型特性
- 声明泛型方法时,类型参数要放在修饰符(例如public和static)之后,返回类型之前;
- 泛型类型参数不能用基本类型实例化
Entry<String, int> entry; //error - 泛型类型参数可以有多个限定:T extends Runnalbe & AutoCloseable
- 泛型不能被实例化,包括泛型数组
- 泛型类型参数可以有多个接口限定,但最多只能有一个类;如果有一个限定是类,那么它必须放在限定列表第一位
JAVA可以使用通配符限制方法的参数类型和返回类型应该如何变化,这种机制有时被称作使用时变化
子类型通配符和父类型通配符
<? extends Runnable>表示任意Runnable的子类型;
<? super Employee>表示Employee的一个父类型;
- 创建泛型数组
// 方式一
public static <T> T[] get(Class<T> type, int size) {
return (T[]) Array.newInstance(type, size);
}
// 方式二(先声明通配类型数组再强制转换)
Pair<String>[] pairs = (Pair<String>[]) new Pair<?>[10];
- 钻石语法

JAVA泛型转换
- 虚拟机中没有泛型,只有普通类和方法;
- 所有的类型参数都用他们的限定类型替换;
- 桥方法被合成来保持多态;
- 为保持类型安全性,必要时插入强制类型转换;