泛型(泛:广泛)—> 广泛的数据类型
将某一个类/接口/方法/变量的数据类型象使用参数一样传递给类/接口/方法/变量。
数据类型的参数化,任意化
没有使用泛型的情况
public static void main(String[] args) {
List list = new ArrayList();
list.add(1);
list.add(3);
list.add("hello");
list.add(new Object());
for (Object obj:list) {
System.out.println((String)obj);
}
}
通过上面的场景我们发现List中默认可以存放任意类型的数据,但是在具体操作的时候,如果数据类型不一致就会出现上面的类型转换异常的错误,为了避免这种情况我们可以在声明的时候来指定泛型【也就是list中能够存放的数据类型】
我们在申明ArrayList时,指定了存储类型为String 所以在编译阶段,我们存入其他类型的元素,就会报出错误.即我们的申明强制的指定了ArrayList集合中存储的元素只能是指定的String类型.
这就是泛型使用的本质意义所在,指定参数化类型
泛型只在编译阶段有效,泛型类型在逻辑上可看成是多个不同的类型,但是其实质都是同一个数据类型
编译之后程序会采取去泛型化的措施,通过案例演示来介绍
public static void main(String[] args) throws Exception{
List stringList = new ArrayList<>();
stringList.add("1");
stringList.add("hello");
stringList.add("GUPAO");
for(Object obj:stringList ){
System.out.println((String)obj);
}
// 通过反射的方式添加数据到集合中
Class extends List> aClass = stringList.getClass();
Method method = aClass.getDeclaredMethod("add", Object.class);
method.invoke(stringList,new Object());
System.out.println(stringList);
}



