对于红线部分:
System.out.println(al.get(0)); //打印abc
System.out.println(al.get(0).getClass()); //报错java.lang.String cannot be cast to java.lang.Integer
对于非红线部分:
System.out.println(al.get(0)); //报错java.lang.Integer cannot be cast to java.lang.String
Method getEle = al.getClass().getMethod("get", int.class);
System.out.println(getEle.invoke(al, 0)); //打印12
System.out.println((Object)al2.get(0)); //打印12
结论:
1,反射会绕过泛型检查。
2,(我猜是)get(0)方法在取得元素后会进行类型转换,但若我们对元素进行强制转换或者其他某些操作,会使get(0)跳过类型转换操作。 |