Java相当于C++模板是什么?

2022-09-01 16:36:30

Java相当于C++模板是什么?

我知道有一个名为Template的接口。这有什么关系吗?


答案 1

C++模板在 Java 中不存在。最好的近似值是泛型

一个巨大的区别是,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); }

其中有一个名为 的方法。Somethingadd

在C++中,编译器会为代码中使用的模板的所有实例创建模板的编译版本。因此,如果我们有

int intResult = sum(5, 4);
double doubleResult = sum(5.0, 4.0);

然后,C++编译器将编译 for 的一个版本和 for 的一个版本。sumintsumdouble

在Java中,有擦除的概念。发生的情况是编译器删除对泛型类型参数的所有引用。编译器只创建代码的一个已编译版本,而不管它与不同类型的参数一起使用多少次。

其他区别


答案 2

Java中没有真正的模板。C++模板是用于生成类的编译时实体。在运行时,没有它们的踪迹。

在Java中,有参数化类型作为称为泛型的机制的一部分。它具有类似的目的,但在运作方式和影响方面存在显着差异。它在运行时有一些表示,有特定的规则等。

从阅读Java教程开始,然后阅读Bloch的 Effective Java,了解如果你想成为“高级用户”的警告的详细说明。