首頁 > Java > java教程 > 擦除

擦除

Linda Hamilton
發布: 2024-12-30 15:15:10
原創
671 人瀏覽過

Erasure (Apagamento de Tipos)

什麼是擦除?
- 擦除 是 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中文網其他相關文章!

來源:dev.to
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板