我正在使用MultiKeyMap
提供的org.apache.commons.collections4.map
。我需要通过getter方法返回此地图的不可修改视图,以便客户端无法对其进行修改。对于Java的内置地图,我可以使用Collections.unmodifiableMap()
方法,但是对于此特定地图,我找不到任何类似的方法。最好的方法是什么?
答案 0 :(得分:1)
由于MultiKeyMap<K,V>
实现了接口java.util.Map<MultiKey<? extends K>,V>
,所以将MultiKeyMap
用Collections.unmodifiableMap()
包裹起来应该没有问题。您可能只需要使用一种不同的方法来访问元素:对于每个get
调用,您都需要传递一个显式创建的MultiKey
,但这不是主要问题。>
但是,您真的要这样做吗?通过返回您字段的不可修改的视图,您将泄漏类的实现详细信息。也就是说,您将泄漏使用Apache类中的字段实现该事实的事实。如果您以后想将其更改为使用,例如番石榴代替,那么您必须四处寻找班上的所有用户,并使用不同的参数将其更改为调用get
。因此,不考虑返回集合字段(尽管是不可修改的视图),而应考虑为集合的各个元素添加getter方法。即您可以写get(key1, key2)
等。有关更多详细信息,请参见:
https://www.martinfowler.com/bliki/EncapsulatedCollection.html