获取不可修改的MultiKeyMap

时间:2018-10-01 09:59:43

标签: java hashmap

我正在使用MultiKeyMap提供的org.apache.commons.collections4.map。我需要通过getter方法返回此地图的不可修改视图,以便客户端无法对其进行修改。对于Java的内置地图,我可以使用Collections.unmodifiableMap()方法,但是对于此特定地图,我找不到任何类似的方法。最好的方法是什么?

1 个答案:

答案 0 :(得分:1)

由于MultiKeyMap<K,V>实现了接口java.util.Map<MultiKey<? extends K>,V>,所以将MultiKeyMapCollections.unmodifiableMap()包裹起来应该没有问题。您可能只需要使用一种不同的方法来访问元素:对于每个get调用,您都需要传递一个显式创建的MultiKey,但这不是主要问题。

但是,您真的要这样做吗?通过返回您字段的不可修改的视图,您将泄漏类的实现详细信息。也就是说,您将泄漏使用Apache类中的字段实现该事实的事实。如果您以后想将其更改为使用,例如番石榴代替,那么您必须四处寻找班上的所有用户,并使用不同的参数将其更改为调用get。因此,不考虑返回集合字段(尽管是不可修改的视图),而应考虑为集合的各个元素添加getter方法。即您可以写get(key1, key2)等。有关更多详细信息,请参见:

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

https://refactoring.guru/encapsulate-collection