关于泛型擦除
泛型是JDK1.5的一项新特性,他的本质就是参数化类型的应用。
Java语言中的泛型只是在程序源码中存在,在变异后的字节码文件中,已经被替换成原来的原生类型,并且在相应的地方插入强转型代码。
因此,ArrayList<String>
和ArrayList<int>
就是同一个类,所以说泛型技术就是Java语言的一颗语法糖。
Java的泛型是假的泛型,只是在编译器中做了语法检查,和C#的泛型是不一样的,只要编译后就全部成了Object。
当初,JDK团队为什么使用泛型擦除的方式,可能是是为了实现简单、兼容性考虑,现在已经不得而知了。
擦除是有办法补偿的,就是显示地传递类型标签。