當前的Java框架提供了一個Collection
類,然後從集合中獲取「不可修改」集合。沒有對應於公開公開的不可修改集合的類。如果我要重新設計一個Collection
類層次結構,我將有一個Collection
接口(它是隻讀的),其子類爲ModifiableCollection
(可以對其進行修改)。目前的方法是不夠的,因爲它只提供運行時錯誤檢查而不是編譯時檢查。通過在層次結構底部的顯式只讀集合類,可以避免運行時錯誤。集合層次結構應爲Collection(只讀) - > ModifiableCollection
請注意,我指的是隻讀集合,而不是不可變的,雖然概念是相似的。見https://stackoverflow.com/a/27611460/4350148。
這個問題的部分原因是由於我在編寫代碼時遇到的問題。我發現有時我對已經不可修改的集合調用Collections.unmodifiableCollection(Collection col)。該方法只是簡單地包裝收集。對於只讀版本,每種方法都會更清楚,返回的是哪種集合,以及方法是否可以更改其中一個集合類型參數的內容。
這種方法會更有意義嗎?或者我在這裏錯過了什麼?
如果你傳遞一個可變的集合,它假定它是不可變的方法,但你在代碼的其他地方改變這個集合,有可能在另一個線程。然後它不是真正的不可變的,只是被調用者不能改變它,除非帶有不可變引用的方法將它轉換爲可變的引用。 –
@PeterLawrey我只在這裏讀過,我並不是指不可變的。他們是不一樣的 –