他们之间有很大的区别。在C中,不必为泛型类型指定类或接口。这就是为什么你可以创建真正的通用函数和类,与更宽松的打字的警告。
template T sum(T a, T b) { return a + b; }
上面的方法添加了两个相同类型的对象,并且可以用于具有“”运算符可用的任何类型T.
在Java中,如果要对传递的对象调用方法,则必须指定类型,如:
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结构。
编辑:以上对有用性的意见是由一个年轻的自我写的。当然,Java的泛型有助于类型安全。