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

本文討論了使用Maven和Gradle進行Java項目管理,構建自動化和依賴性解決方案,以比較其方法和優化策略。

本文使用Maven和Gradle之類的工具討論了具有適當的版本控制和依賴關係管理的自定義Java庫(JAR文件)的創建和使用。

本文討論了使用咖啡因和Guava緩存在Java中實施多層緩存以提高應用程序性能。它涵蓋設置,集成和績效優勢,以及配置和驅逐政策管理最佳PRA

本文討論了使用JPA進行對象相關映射,並具有高級功能,例如緩存和懶惰加載。它涵蓋了設置,實體映射和優化性能的最佳實踐,同時突出潛在的陷阱。[159個字符]

Java的類上載涉及使用帶有引導,擴展程序和應用程序類負載器的分層系統加載,鏈接和初始化類。父代授權模型確保首先加載核心類別,從而影響自定義類LOA


熱AI工具

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

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

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

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

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

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

WebStorm Mac版
好用的JavaScript開發工具

mPDF
mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),