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