他们之间有很大的不同.在C++中,不必为泛型类型指定类或接口.这就是为什么您可以创建真正的泛型函数和类,但需要注意的是更松散的类型.
template <typename T> T sum(T a, T b) { return a + b; }
上面的方法添加了两个相同类型的对象,可以用于任何具有"+"运算符的类型T.
在Java中,如果要对传递的对象调用方法,必须指定类型,例如:
<T extends Something> T sum(T a, T b) { return a.add ( b ); }
在C++中,泛型函数/类只能在头文件中定义,因为编译器为不同的类型生成不同的函数(用来调用).因此编译速度较慢.在Java中,编译没有很大的损失,但是Java使用了一种称为"擦除"的技术,其中泛型类型在运行时被擦除,所以在运行时Java实际上是在调用……
Something sum(Something a, Something b) { return a.add ( b ); }
所以Java中的泛型编程并不是真正有用的,它只是帮助新的foreach构造的一点语法糖.
EDIT:以上关于有用性的观点是一位年轻人写的.Java的泛型当然有助于类型安全.