在C++中,标准的叫法是:类模版,在java中叫泛型。二者的作用是相同的,不一样的地方在编译解析的方式不同。C++的模板特性是是编译时对于给定的不同的模板类型参数生成对应版本的目标代码。而Java中的泛型是用类型擦除实现的语法糖,实际上在编译期类型检查以外,生成目标代码的过程中根本不区分泛型的类型参数,只不过针对object(而不是类型参数)生成代码,同时在必要处插入从object到给定的类型参数的类型转换而已(也因此类型参数不能是基本类型参数,C++模板就没这个限制),不会比手动实现显式类型转换有更高的运行期效率(不过可以在源代码中省略类型转换能稍微减少写源代码过程中的出错机会)。所以,某种意义上来说,Java的泛型是伪泛型,这也是Java中被人(例如Bruce Eckel)批评最多的特性之一。 |