是否有任何“好”的代码模式来初始化和填充私有可变映射,然后将它们公开为不可变的映射?还是应该在这种情况下永久性地后悔我的功能性不当行为?斯卡拉 - 初始化可变映射并将它们公开为不可变
在某个类中,我将一些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