关于以下ArrayList泛型擦除,在ArrayList<Integer>中add一个字符串"abc",我们知道泛型只在编译时有效,在运行时会被擦除掉,所以我们直接去拿ArrayList的字节码文件,通过反射来添加字符串,添加后可以打印出list,现在用Iterator<Integer>去遍历也是可以打印出字符串"abc"的,Iterator加泛型<Integer>是不考虑每个元素的数据类型吗? import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import java.util.ArrayList; import java.util.Iterator; public class Test1 { public static void main(String[] args) throws Exception { ArrayList<Integer> list = new ArrayList<>(); list.add(111); list.add(222); Class clazz = Class.forName("java.util.ArrayList"); Method m = clazz.getMethod("add",Object.class); m.invoke(list, "abc"); System.out.println(list); Iterator<Integer> it = list.iterator(); while(it.hasNext()) { System.out.println(it.next()); } } }
|