Java的Collections.checked *()api爲我們提供了對底層集合的類型安全視圖。但是這些檢查發生在運行時並拋出一個運行時異常,這可能會導致性能代價高昂。通過使用泛型集合爲這些集合提供特定的類型,可以在編譯時強制執行相同的類型檢查。那麼在有些情況下,Collections.checked *()在指定類型時比泛型集合的得分高嗎?Java Collections.checked *()與通用集合
5
A
回答
10
的Javadoc解釋說得好:
在語言中的泛型機制提供了編譯時(靜態)類型檢查,但是有可能戰勝這一機制選中轉換。通常這不是問題,因爲編譯器在所有這些未經檢查的操作上發出警告。然而,有些時候,靜態類型檢查本身是不夠的。例如,假設一個集合被傳遞給第三方庫,並且必須通過插入錯誤類型的元素來避免庫代碼破壞集合。
0
在新的1.5+項目中使用帶有未檢查類型的舊庫時。
5
主要區別在於編譯時檢查可以很容易地被意外和有意地繞過。
編譯器將警告你,如果出現這種情況,但警告很容易被忽略,問題可能在一些地方圖書館發生。泛型提供的類型信息是可靠,但是只有如果涉及的所有代碼都編譯時沒有任何有關泛型的警告:沒有未檢查的轉換,沒有原始類型。
使用Collections.checked*()
爲您提供了一種強制執行限制的方法,即使使用超出控制範圍的代碼(只要您可以傳入您自己的集合)。
1
Collectons.checkedXxxxx()執行運行時檢查提供了額外的安全性。可以通過使用類型擦除來避免編譯器,但是檢查的集合應始終檢查類型是否正確。
我懷疑性能差異是否足以擔心。它很可能是大約10納秒或更少。
相關問題
- 1. Java:通過引用收集集合的任意集合
- 2. Java集合和等於與==
- 3. 迭代通過Java集合使用jQuery
- 4. Java獲取通用類型的集合
- 5. 使用通配符的Java集合
- 6. 通用集合
- 7. 交集與扭曲的集合Java
- 8. 與集合轉換集合
- 9. WCF REST服務與通用集合
- 10. 使用Java集合
- 11. 使用lambdas的Java集合集合
- 12. 集合的通用類型子集合
- 13. 通用父集合拆分子集合
- 14. 在集合中創建通用集合
- 15. Magento通用集合
- 16. PowerShell通用集合
- 17. 通用集合類?
- 18. 集合與子集合
- 19. Java集合 - 通過多組屬性
- 20. 泛型集合和通配符的Java
- 21. Java 8分組通過泛型集合
- 22. 使用通用集合
- 23. Java通過通用類型獲取集合
- 24. Java集合GC
- 25. Java 8泛型集合與可選項
- 26. IMDB(內存數據庫)與Java集合
- 27. 在java與CQL中的表示集合
- 28. Java集合類的使用
- 29. DATENAME不能與集團合作,通過
- 30. TypeScript通用集合:列表
因爲你碰巧在金融公司工作,當你需要乞求改變一個圖書館,並面對幾個月的官僚過程。是的,你是對的,我應該得到一個更好的工作.... –