1. 程式人生 > >Java泛型--編譯器型別擦除

Java泛型--編譯器型別擦除

       Java的泛型是偽泛型。在編譯期間,所有的泛型資訊都會被擦除掉。正確理解泛型概念的首要前提是理解型別擦出(type erasure)。

       Java中的泛型基本上都是在編譯器這個層次來實現的。在生成的Java位元組碼中是不包含泛型中的型別資訊的。使用泛型的時候加上的型別引數,會在編譯器在編譯的時候去掉。這個過程就稱為型別擦除。

    如在程式碼中定義的List<object>和List<String>等型別,在編譯後都會程式設計List。JVM看到的只是List,而由泛型附加的型別資訊對JVM來說是不可見的。Java編譯器會在編譯時儘可能的發現可能出錯的地方,但是仍然無法避免在執行時刻出現型別轉換異常的情況。型別擦除也是Java的泛型實現方法與C++模版機制實現方式(後面介紹)之間的重要區別。

http://irfen.iteye.com/blog/1888312