繁体   English   中英

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

[英]What is the Java equivalent of C++'s templates?

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

我知道有一个名为Template的界面。 这有关系吗?

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

一个巨大的区别是在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 ++编译器将编译版本的sumint和一个版本的sumdouble

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

其他差异

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

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

首先阅读Java教程 ,然后阅读Bloch的Effective Java,了解如果您想成为“超级用户”的详细说明。

Java中没有模板。 唯一可与模板相媲美的是Java Generics。

http://java.sun.com/developer/technicalArticles/J2SE/generics/

你真的不需要Java中的模板。 当您需要完全不同的类型作为您不知道的参数时,模板主要是有用的。 在Java中,所有对象都是虚拟的并且从一个根对象继承,并且原始类型的定义更加清晰,并且转换的工作方式更加灵敏,因此实际上没有任何意义。

使用C ++样式模板可以获得更好的性能,但是由于它们生成更多代码的方式和快速的CPU速度每年越来越超过数据访问速度,这种情况越来越少,特别是当涉及到对象时原始人。

Java具有与模板类似但不完全相同的泛型。 我不知道Template接口是什么,但它与C ++模板无关。

java中没有构建模板机制。 相反,他们有仿制药。 此外,ides有一些称为代码模板的东西,例如eclipse

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM