java - C++ 模板的 Java 等价物是什么?

标签 java c++ generics templates

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的概念。 .发生的情况是编译器删除了对泛型类型参数的所有引用。编译器只创建一个编译版本的代码,无论它与不同类型参数一起使用多少次。

其他区别

关于java - C++ 模板的 Java 等价物是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2159338/

相关文章:

function - 无法从通用元素的迭代器构建通用类型

java - 在selenium中选择具有几乎相同属性的单选按钮

java - 如何使用Java Graphics.DrawString绘制Wingding.ttf字体的字符?

java - 获取继承父进程 IO 的子进程的输出

java - 如果您在 Java 中使用已弃用的方法/函数,会出现什么问题?

c++ - clang : What does AST (abstract syntax tree) look like?

c++ - 指针 : p++ & p+1

c++ - 有没有人考虑过更多 "strict"风格的 C++,其中默认/需要初始化变量?

arrays - 不同类型的 RxSwift 变量数组

json - Dart:具有 .fromJson 构造函数的泛型