Java相当于C++模板是什么?
Java相当于C++模板是什么?
我知道有一个名为Template的接口。这有什么关系吗?
Java相当于C++模板是什么?
我知道有一个名为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); }
其中有一个名为 的方法。Something
add
在C++中,编译器会为代码中使用的模板的所有实例创建模板的编译版本。因此,如果我们有
int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);
然后,C++编译器将编译 for 的一个版本和 for 的一个版本。sum
int
sum
double
在Java中,有擦除的概念。发生的情况是编译器删除对泛型类型参数的所有引用。编译器只创建代码的一个已编译版本,而不管它与不同类型的参数一起使用多少次。
其他区别
Java中没有真正的模板。C++模板是用于生成类的编译时实体。在运行时,没有它们的踪迹。
在Java中,有参数化类型作为称为泛型的机制的一部分。它具有类似的目的,但在运作方式和影响方面存在显着差异。它在运行时有一些表示,有特定的规则等。
从阅读Java教程开始,然后阅读Bloch的 Effective Java,了解如果你想成为“高级用户”的警告的详细说明。