擦除
什麼是擦除?
- 擦除 是 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中文網其他相關文章!
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章
如何修復KB5055612無法在Windows 10中安裝?
4 週前
By DDD
<🎜>:泡泡膠模擬器無窮大 - 如何獲取和使用皇家鑰匙
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
<🎜>:種植花園 - 完整的突變指南
3 週前
By DDD
北端:融合系統,解釋
4 週前
By 尊渡假赌尊渡假赌尊渡假赌
Mandragora:巫婆樹的耳語 - 如何解鎖抓鉤
3 週前
By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

公司安全軟件導致部分應用無法正常運行的排查與解決方法許多公司為了保障內部網絡安全,會部署安全軟件。 ...

將姓名轉換為數字以實現排序的解決方案在許多應用場景中,用戶可能需要在群組中進行排序,尤其是在一個用...

系統對接中的字段映射處理在進行系統對接時,常常會遇到一個棘手的問題:如何將A系統的接口字段有效地映�...

在使用MyBatis-Plus或其他ORM框架進行數據庫操作時,經常需要根據實體類的屬性名構造查詢條件。如果每次都手動...

在使用IntelliJIDEAUltimate版本啟動Spring...

Java對象與數組的轉換:深入探討強制類型轉換的風險與正確方法很多Java初學者會遇到將一個對象轉換成數組的�...

電商平台SKU和SPU表設計詳解本文將探討電商平台中SKU和SPU的數據庫設計問題,特別是如何處理用戶自定義銷售屬...

Redis緩存方案如何實現產品排行榜列表的需求?在開發過程中,我們常常需要處理排行榜的需求,例如展示一個�...
