C的模板的Java等價物是什麼?
我知道有一個名為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); }
Where Something有一個叫做add的方法.
在C中,發生的是編譯器為程式碼中使用的模板的所有例項建立模板的編譯版本.因此,如果我們有
int intResult = sum(5, 4); double doubleResult = sum(5.0, 4.0);
那麼C編譯器將編譯一個版本的sum和一個版本的sum為double.
在Java中,存在erasure 的概念.會發生什麼是編譯器刪除對通用型別引數的所有引用.編譯器只建立一個編譯版本的程式碼,而不管使用不同型別的引數多少次.
其他差異
> C不允許型別引數的繫結,而Java則不允許
> C允許型別引數為基元,而Java不支援
> C允許模板type parameters to have defaults 哪裡Java沒有
> C允許template specialization 而Java則沒有
而且,正如應該預期的那樣,C風格template metaprogramming 是不可能的Java泛型.
>忘記在Java中看到curiously recurring template pattern
>Policy-based design 在Java中是不可能的
http://stackoverflow.com/questions/2159338/what-is-the-java-equivalent-of-cs-templates