2008-12-17 35 views

回答

9

爲了允許與預先通用字節碼的二進制兼容性,因此允許新代碼與舊代碼接口。

Type Erasure頁面的Java教程:

類型擦除能夠使用仿製藥,以保持與之前被仿製藥 創建Java庫和 應用程序的二進制兼容性 Java應用程序 。

[...]

類型擦除的存在使得新代碼 可以繼續遺留 代碼交互。

對於相關問題,請看C# vs Java generics

4

我記得讀一些有關這本書的Java性交:

與檢查 元素在運行時收集的是,它是 極其昂貴的問題; 的效率僅爲O(n)。如果您有 只有10個地址在您的收藏中, 檢查元素很容易。但是,如果 集合包含15,000個 地址,那麼只要有人調用setter,就會產生一個顯着開銷 。

在另一方面,如果你 可以防止用戶在編譯的時候把不是地址等 任何在你 集合,然後你 就不必在 運行時檢查類型。如果他們試圖給你 不是地址的東西,那麼 編譯器會拒絕這個嘗試。 這正是參數化 類型所做的。

但是,「爲什麼」的問題永遠不能真正得到滿意的回答,因爲涉及人,時間,地點和政治的變量太多了。我記得在其他地方讀到,這個決定與保持與Java字節碼中已經完成的方式的兼容性有很大的關係。下面是同一本書中的另一個引用:

編譯器解決了泛型引入的類型安全性後,它從類型中刪除了參數化。因此,信息在運行時不可用。如Sun所述,刪除的目的是允許使用較舊版本的JDK構建的類庫能夠在JDK 1.5虛擬機上運行。

我很好奇,運行時泛型提供了哪些優點?

相關問題