1. 程式人生 > >Java泛型 VS C#泛型 (偽泛型 VS 真泛型)

Java泛型 VS C#泛型 (偽泛型 VS 真泛型)

功能 方法表 語法 一個 class msil 虛方法 strong 反射

一、泛型的本質

泛型是參數化類型的應用,操作的數據類型不限定於特定類型,可以根據實際需要設置不同的數據類型,以實現代碼復用。

二、Java泛型

Java 泛型是Java1.5新增的特性,JVM並不支持。

實現原理:Java源代碼裏面類型提供實現泛型功能,而編譯後Class文件類型就變成原生類型(即類型被擦除掉),而在引用處插入強制類型轉換以實現JVM對泛型的支持。本質是Java泛型只是Java提供的一個語法糖,底層

的JVM並不提供支持,Java中的泛型屬於偽泛型。

但是編譯後的字節碼通過反射後還是可以獲取到泛型的真實類型信息,因為泛型擦除並沒有把保存泛型元數據擦除掉。

三、C#泛型

C# 泛型是2.0C#和CLR中新增的特性,CLR支持。

實現原理:C#無論語言層面還是CLR都提供對泛型的支持,所以C#泛型編譯後MSIL泛型都是切實存在的,類型不沒有變成原生類型,而是通過類型膨脹實現,在運行期生成,自己的虛方法表和類型數據.C#泛型屬於

四、小結

Java泛型 VS C#泛型 (偽泛型 VS 真泛型)