2011-02-16 65 views
1

我想知道Java5提供的泛型是否有運行時優勢。我的意思是,我知道我們可以爲類/集合實現類型安全,併爲泛型提供了一系列可能的對象,但是在編譯時間之前運行時,我們會獲得什麼好處?Java泛型 - 任何運行時好處

+1

「在編譯時間前獲得運行時間」是什麼意思?你如何在沒有編譯的情況下運行? – CoolBeans

+2

好吧,運行時好處更少ClassCastExceptions – samitgaur

+0

更少的ClassCast異常id實際上並不是一個運行時好處 - 如果代碼正確,您不會收到它們。好處是編寫正確的代碼更容易。 – paulmurray

回答

10

Java泛型在運行時通過erasure被刪除,所以性能應該是相同的。

0

是的 - 但它很小。

當你使用泛型時,你不需要使用instanceof並且無處不在,所以不會生成對這些指令進行類型檢查的字節碼指令。不利的一面是,如果你鏈接到你的類的舊版本而不重新編譯它們,你可以在運行時結束一些相當低級別的錯誤。儘管如此,如果你大量使用一個緊湊的循環,否則需要一個演員陣容,那麼我想泛型可能會加快一點點。但性能改進不是使用它們的關鍵。

+1

大多數鑄造指令仍然由編譯器生成,當你編寫沒有泛型的程序時,實際上是相同的,你也不需要你的instanceof測試。 –