C++ 模板的 Java 等价物是什么?
我知道有一个叫 Template 的接口(interface)。有关系吗?
最佳答案
Templates在 C++ 中不存在于 Java 中。最佳近似值是 generics .
一个巨大的区别是在 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); }
其中Something
有一个名为add
的方法。
在 C++ 中,编译器会为代码中使用的模板的所有实例创建模板的编译版本。因此,如果我们有
int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);
然后 C++ 编译器将为 int
编译一个版本的 sum
并为 double
编译一个版本的 sum
.
在Java中,有erasure的概念。 .发生的情况是编译器删除了对泛型类型参数的所有引用。编译器只创建一个编译版本的代码,无论它与不同类型参数一起使用多少次。
其他区别
- C++ 不允许类型参数的边界,而 Java 允许
- C++ 允许类型参数是基元,而 Java 不允许
- C++ 允许模板 type parameters to have defaults Java 没有的地方
- C++ 允许 template specialization而Java没有 而且,正如在这一点上所预料的那样,C++ 风格 template metaprogramming使用 Java 泛型是不可能的。
- 忘记查看 curiously recurring template pattern在 Java 中
- Policy-based design在 Java 中是不可能的
关于java - C++ 模板的 Java 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159338/