其实视频里也没说完全被抹掉,而且还举了个例子,通过反射获取方法形参中的泛型,比如有个形参Vector<Integer> v,那么其中的Integer是可以被获取的。这里有个含义理解的问题。擦除的泛型信息到底指什么?我也没完全搞清楚,暂时认可网上的一种说法:源代码里声明的泛型信息是可以在运行时获取的。这里的“声明”指的是定义类、接口、方法、枚举。比如说public ArrayList<E> {}这叫声明,但是ArrayList<Integer> al = new ArrayList<Integer>()就不叫声明而是“声明的使用”(这个区分还是挺重要的,Java的源程序模型框架就用到了这个区分,可参考我录制的视频第4-5集http://bbs.itheima.com/thread-137509-1-1.html )
所以,如果你把那些泛型反射方法作用于ArrayList<Integer> al = new ArrayList<Integer>(),你得到的只能是“E”,而不是你所期待的Integer。因为E是声明的泛型信息,Integer是“使用声明”中的泛型信息,后者被擦除了。
当然,想得到最权威的答案就要去看java language specification和JVM specification两份文档了