是否有任何「好」的代碼模式來初始化和填充私有可變映射,然後將它們公開爲不可變的映射?還是應該在這種情況下永久性地後悔我的功能性不當行爲?斯卡拉 - 初始化可變映射並將它們公開爲不可變
在某個類中,我將一些Maps初始化爲可變的,因爲初始化它們的邏輯並不十分自然,在這種情況下,使用純可變創建方法。或者,我只是懶惰地模仿它。
現在,我得到了Scala醜陋的代碼 - 經過所有的初始化計算,我將可變映射覆制轉換爲不可變映射(主要通過.toMap
)。這已經很醜陋了,因爲(1)代碼有兩倍的地圖和雙重命名感覺有點偏離,(2)轉換線看起來比我希望的更多參與。因爲它們只能在初始化計算之後聲明,所以我不喜歡所得到的不可變映射的類型定義,現在它們只能駐留在代碼的底部(或者,它們是否可以被定義爲lazy
並移動到頂端?仍然不完美)。
任何方式來優雅地包裝可變的地圖初始化代碼?
關於(2):您可以在可變映射上調用'toMap'來獲取不可變的版本。你能爲整個問題提供一個小例子嗎? – Kigyo 2014-09-27 21:05:17
考慮在調用構造函數之前使用輔助構造函數(或伴隨對象方法)創建最終的不可變數據。這應該消除懶惰和堅持原始可變結構的需要 - 授予它仍然是重建過程和新對象。 – user2864740 2014-09-27 21:08:39
是不是像一個不可變的視圖或投影? – matanster 2014-09-27 21:09:54