我知道有一个名为Template的界面.是相关的吗?
.
一个巨大的区别是,在C这是合法的:
<typename T> T sum(T a, T b) { return a + b; }
Java中没有等效的结构.你能说的最好的是
<T extends Something> T Sum(T a, T b) { return a.add(b); }
Where Something有一个叫做add的方法.
在C中,发生的是编译器为代码中使用的模板的所有实例创建模板的编译版本.因此,如果我们有
int intResult = sum(5, 4); double doubleResult = sum(5.0, 4.0);
那么C编译器将编译一个版本的sum和一个版本的sum为double.
在Java中,存在 erasure 的概念.会发生什么是编译器删除对通用类型参数的所有引用.编译器只创建一个编译版本的代码,而不管使用不同类型的参数多少次.
其他差异
> C不允许类型参数的绑定,而Java则不允许
> C允许类型参数为基元,而Java不支持
> C允许模板 type parameters to have defaults 哪里Java没有
> C允许 template specialization 而Java则没有
而且,正如应该预期的那样,C风格 template metaprogramming 是不可能的Java泛型.
>忘记在Java中看到 curiously recurring template pattern
> Policy-based design 在Java中是不可能的
http://stackoverflow.com/questions/2159338/what-is-the-java-equivalent-of-cs-templates