public static void test2 () throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
ArrayList<Integer> integerList = new ArrayList<>();
integerList.add(0);
integerList.getClass().getMethod("add", Object.class).invoke(integerList,"AAAA");// add(Object o)
for (int i = 0; i < integerList.size(); i++) {
System.out.println(integerList.get(i));
}
}
执行结果如下:
如上代码所示,我用反射跳过编译器,获取擦除参数类型后生成的 字节码中的方法add(Object o) 向Integer类型的ArrayList添加String类型的值是可行的。
疑问是,当我遍历get的时候,为什么取出添加的String值不报类型转换异常?
难道get()返回的Object类型,没有再帮我转为Integer类型了吗?