爲什麼集合類型檢查僅在編譯時發生, 以及在編譯時和運行時檢查陣列類型。爲什麼集合類型檢查僅在編譯時發生,並且在編譯時和運行時檢查陣列類型
-2
A
回答
0
Java使用類型擦除,因爲正如在@khelwood的評論中指出的那樣,泛型是後來的思想,並在1.5中引入了語言。
此外,運行時類型檢查的計算量很大,因此在編譯時處理檢查以減少運行時檢查的需求。
另外,正如InjuredThePatient在評論中指出的那樣,您看到的「運行時類型檢查」與ArrayList
s實際上是內存分配錯誤。
0
參考數組必須進行運行時檢查,因爲它們的怪異行爲允許靜態不安全的隱式轉換。您可以將String[]
分配給Object[]
並將Thread
存儲到其中。如果在運行時沒有檢查它(它會拋出一個ArrayStoreException
),那麼類型安全性將被破壞,因此移動代碼安全。
泛型的複雜性導致了各種模糊的編譯器錯誤。這些都是相對良性的,但是如果泛型被JVM強制執行,它們就會成爲漏洞。事實證明,規範本身是不健全的。
如果Object[]
是唯一的參考數組類型,那麼Java將會是更好的語言。也會迫使main
更明智一些。
相關問題
- 1. 類型擦除:在編譯時檢索值類型檢查
- 2. 編譯時的C++類型檢查
- 3. 編譯時檢查通用類型
- 4. 爲什麼foreach跳過對接口類型的編譯時類型檢查?
- 5. 檢查在編譯的時候,如果類型爲指針
- 6. 在編譯時檢查是否存在引用/類型
- 7. 僅在編譯時檢查Obsolete屬性?
- 8. 爲什麼VB6在編譯時不檢查對象類型的對應關係?
- 9. 檢查類型是否是在編譯時
- 10. 如何檢查類型元組在編譯時
- 11. Java抽象類型類編譯時間檢查
- 12. 使用類型爲編譯時檢查建立任意約束
- 13. 在運行時編譯並使用類
- 14. 編譯時間檢查針對C中的多種類型?
- 15. 強制編譯時錯誤檢查模板類型以恆定
- 16. 編譯時檢查C中的多態類型?
- 17. 編譯時檢查的URI
- 18. 編譯時檢查或java.util.ConcurrentModificationException
- 19. 在小部件中檢查運行時間/編譯時間?
- 20. 類型和新類型之間的編譯時間和運行時間差
- 21. 在運行時的編譯時間類型
- 22. 編譯時發生類模板時發生什麼
- 23. 在Scala中,如何對伴隨對象執行編譯時類型檢查?
- 24. 在執行類似類型的集合的編譯時檢查上拋出運行時異常有什麼好處?
- 25. 代碼運行時檢查類型
- 26. 類型的層次結構與編譯類型檢查
- 27. 在編譯時檢查指針大小
- 28. 在編譯時靜態檢查地圖?
- 29. 在編譯時檢查枚舉值
- 30. 在編譯時檢查ObjectDataSource的TypeName
由於維度和內存分配。 – LazerBanana
可能是因爲泛型在Java 5中被入侵到了語言中,從而不會破壞後向兼容性。 – khelwood