簡體   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