Java中的泛型和C++中的泛型,也就是C++中的模板類和模板函數(shù)等等,有著本質(zhì)的不同.
GJ (Generic Java)是對 Java 語言的一種擴(kuò)展,是一種帶有參數(shù)化類型的 Java 語言。用 GJ 編寫的程序看起來和普通的 Java 程序基本相同,只不過多了一些參數(shù)化的類型同時(shí)少了一些類型轉(zhuǎn)換。實(shí)際上,這些 GJ 程序也是首先被轉(zhuǎn)化成一般的不帶泛型的 Java 程序后再進(jìn)行處理的,編譯器自動完成了從 Generic Java 到普通 Java 的翻譯。
GJ 程序的語法在表面上與 C++ 中的模板非常類似,但是二者之間有著本質(zhì)的區(qū)別。
首先,Java 語言中的泛型不能接受基本類型作為類型參數(shù)――它只能接受引用類型。這意味著可以定義 List<Integer>,但是不可以定義 List<int>。
其 次,在 C++ 模板中,編譯器使用提供的類型參數(shù)來擴(kuò)充模板,因此,為 List<A> 生成的 C++ 代碼不同于為 List<B> 生成的代碼,List<A> 和 List<B> 實(shí)際上是兩個(gè)不同的類。而 Java 中的泛型則以不同的方式實(shí)現(xiàn),編譯器僅僅對這些類型參數(shù)進(jìn)行擦除和替換。類型 ArrayList<Integer> 和 ArrayList<String> 的對象共享相同的類,并且只存在一個(gè) ArrayList 類。