首页 > 解决方案 > 获取不可修改的 MultiKeyMap

问题描述

我正在使用MultiKeyMaporg.apache.commons.collections4.map. 我需要通过getter方法返回这个地图的一个不可修改的视图,这样客户端就不能修改它。对于 java 的内置地图,我可以使用Collections.unmodifiableMap()方法,但对于这个特定的地图,我找不到任何类似的方法。实现这一目标的最佳方法是什么?

标签: javahashmap

解决方案


由于MultiKeyMap<K,V>实现了接口java.util.Map<MultiKey<? extends K>,V>,你应该没有问题包装你的MultiKeyMapwith Collections.unmodifiableMap()。您可能只需要使用不同的方式来访问元素:对于每个get调用,您需要传递一个显式 created MultiKey,但这不应该是一个主要问题。

然而,你真的想这样做吗?通过返回一个不可修改的字段视图,您将泄露您的类的实现细节;也就是说,您会泄露它是使用 Apache 类中的字段实现的这一事实。如果您稍后想将其更改为使用,例如 Guava,那么您将不得不四处寻找您班级的所有用户并将他们更改为get使用不同的参数进行调用。因此,与其返回集合字段(尽管是不可修改的视图),不如考虑为集合的各个元素添加 getter 方法。即你会写get(key1, key2)等。有关更多详细信息,请参阅:

https://www.martinfowler.com/bliki/EncapsulatedCollection.html

https://refactoring.guru/encapsulate-collection


推荐阅读