Java 泛型的好處及實現原理
阿新 • • 發佈:2018-12-31
做筆試模擬題遇到這樣一個問題,平時常用泛型,好處也差不多知道,但是讓寫出來就不大寫的出來了,所以在這邊整理一下,以後也可以回顧回顧
首先先總結一下好處:
簡單易用 消除強制型別轉換 保證型別安全
泛型好處:
泛型簡單易用
型別安全 泛型的主要目標是實現java的型別安全。 泛型可以使編譯器知道一個物件的限定型別是什麼,這樣編譯器就可以在一個高的程度上驗證這個型別
消除了強制型別轉換 使得程式碼可讀性好,減少了很多出錯的機會
Java語言引入泛型的好處是安全簡單。泛型的好處是在編譯的時候檢查型別安全,並且所有的強制轉換都是自動和隱式的,提高程式碼的重用率。
泛型的實現原理
泛型的實現是靠型別擦除技術 型別擦除是在編譯期完成的 也就是在編譯期 編譯器會將泛型的型別引數都擦除成它的限定型別,如果沒有則擦除為object型別之後在獲取的時候再強制型別轉換為對應的型別。 在執行期間並沒有泛型的任何資訊,因此也沒有優化。
泛型不考慮繼承
List 型別 是否 可以 賦值為 List型別 ?
答案是不可以的
雖然說在賦值之後 String型別可以當做 Object型別使用 但是還是會出現問題
假設如下程式碼
List<String> strings = new ArrayList<>();
strings.add("哈哈哈哈" );
List<Object> objs = new ArrayList<>();
objs = strings; //編譯會出錯,這裡我們假設成功
Object aa = objs.get(0); //此處可以把String轉換為Object使用
objs.add("呵呵呵呵");
objs.add(new Object()); //這時 objs中 既有 String 型別 也有 Object型別
objes.get(2); //這個時候 我們不會知道取出的到底是 Object物件 還是 String型別的物件 因此編譯器為了防止出現這種情況 就提示編譯出錯