Java基礎:泛型小結
阿新 • • 發佈:2022-03-22
目錄
1 型別擦除
於Java的設計是受C++所啟發,所以泛型的實現也是參考了C++。但是,Java泛型是通過型別擦除實現的。
泛型型別引數會被擦除為其第⼀個邊界(多重邊界也是可以的),編譯器實際上會將型別引數替換為其被擦除後的型別(這也說明了型別擦除是在編譯時進行的(而不是執行時))。
型別擦除的原因:
C++是不需要“型別擦除”的,“型別擦除”也不是Java的語言特性,即不是一個優勢,相反,它給程式設計帶來了麻煩,它降低了泛型的“泛化性”。那麼為什麼還要有“型別擦除”呢?
是為了 遷移的相容性 , 充當從⾮泛型程式碼過渡到泛型化程式碼的中間過程。
因為泛型並不是Java與⽣俱來的特性,而是後面新增進來的,但是新增進來時,已經有很多的java元件、java庫了,都沒有使用泛型,所以為了相容舊程式碼,目前最好的辦法就是使用“型別擦除”。即使舊元件舊庫都要升級成有泛型的版本,但是大家不可能約定好了同一時間升級,總有先有後,所以還是要考慮相容性。