Java泛型是Java1.5的新特性
为什么使用泛型:
1、为编写程序代码得到复用;
2、程序使用时可用在编译阶段得到检查,更安全
使用泛型前,先了解数组类型的兼容性-协变数组类型
什么是协变数组类型,下面举例:
public static void main(String[] args) {
Object [] oArr = new Integer[3];
oArr[0] = "s";
}
上述代码能够在编译器中编译通过,可是在运行时报错:ArrayStoreException
Exception in thread "main" java.lang.ArrayStoreException: java.lang.String
at chuck.spring.base.demo.data.structor.ArrayRefTest.main(ArrayRefTest.java:13)
Integer [] IS-A Object数组,String [] IS-A Object[],代码在编译器中不报错,这是因为Java中数组是类型兼容的,这叫做协变数组类型
又因为String IS-NOT-A Integer,所以运行时JVM产生混乱,可是没有发生类型转换,所以报错ArrayStoreException
案例1:
通配符-表示参数类型的子类(或超类)
?extends Shape:通配符限定参数为Shape的子类