什麼是擦除?
- 擦除 是 Java 用於實現泛型的技術,確保與此語言的早期版本向後相容。
- 在編譯期間,所有泛型類型資訊都會被*刪除*(或「擦除」)。
2。使用擦除的動機
與舊程式碼的相容性:
- Java (JDK 5) 中泛型的引入不應使舊程式碼失效。
- 泛型的設計需要確保泛型和非泛型程式碼順利協同工作。
適當的強制:
- 編譯器新增強制轉換以確保與給定參數的類型相容性。
- 從泛型類型中刪除資訊:
- 型別參數只存在於原始碼中,運行時不存在。
4。刪除操作範例
class Gen<T> {
T ob;
Gen(T o) {
ob = o;
}
T getOb() {
return ob;
}
}
登入後複製
class Gen {
Object ob;
Gen(Object o) {
ob = o;
}
Object getOb() {
return ob;
}
}
登入後複製
備註:
- 型別參數被替換為Object。
- 產生的程式碼中沒有可用的通用資訊。
5。擦除的限制
運行時缺少類型資訊:
不可能:
- 在執行時取得實例的泛型類型。
- 直接建立泛型類型的實例(例如不允許使用 new T())。
6。實際影響
刪除解釋:
- 為什麼泛型沒有重載:不允許具有僅因泛型類型而異的簽章的方法。
- 為什麼不能在泛型中直接使用原始類型(例如:Gen 無效;你必須使用 Gen)。
編譯時安全性:
- 雖然類型資訊被刪除,但編譯器在編譯期間會檢查類型相容性。
7。結論
- 使用擦除可以將泛型新增到 Java 中,而不會影響向後相容性。
- 儘管有一些限制,泛型在編譯時提供類型安全,而產生的程式碼仍然與 JVM 的早期版本相容。
以上是擦除的詳細內容。更多資訊請關注PHP中文網其他相關文章!