ArrayList<String> list3 = new ArrayList<>();//首先这风景点"="号右边尖括号里也要写泛型的,提问题也要尽量不要定错误代码,这样会影响坛友观看的.
Class clazz = list3.getClass();
Method addMethod = clazz.getMethod("add", Object.class); //用反射的方式给它加泛型以外的类型,这里为什么不能直接指明是String类型呢?
addMethod.invoke(list3, 78); //上面ArrayList集合中的add(E e)方法,参数是一个泛型类的对象,反射时不知道参数到底是个什么类型的东东,而且在第二行反射时会去类型化,即使第一行指定它加入的是String类型,反射后JAVA也不知道参数的类型,因此第三行反射方法时参数的类型是Object.class,第四行因为是通过反射使用的方法,所以可以向集合对象中加入任意类型的对象.\
一句话,反射会去类型化.
System.out.println(list1.get(0));
}
|