我用Java创建了一个适用于特定Policy
的{{1}}个对象的实现。
它们存储在Namespace
结构中,因此我可以通过调用Map上的Map<Namespace,List<Policy>>
和.containsKey()
轻松检索特定命名空间的策略。为此,我根据JVM规则覆盖了.get()
和equals()
。工作得很好。
现在需求正在发生变化,hashCode()
突然由一个值列表组成,其中等式规则是“其中一个值必须匹配”。换句话说,如果Namespace
中存储的某个值与Namespace A
中存储的值之一匹配,那么它们就是“相等”。
显然覆盖Namespace B
不再起作用,因为我不知道代表哪个值的代码。
如何才能使我的设计最适合新的平等规则?我还应该使用hashCode()
还是有适合我案例的模式?
答案 0 :(得分:1)
如果您允许使用库,则apache MultiKeyMap
可能会有所帮助。
https://commons.apache.org/proper/commons-collections/apidocs/org/apache/commons/collections4/map/MultiKeyMap.html
答案 1 :(得分:0)
如果我正确理解了这些要求,你需要这样的东西:
class Key {
Set values;
@Override
public int hashCode() {
return 1;
}
@Override
public boolean equals(Object key2) {
// Returns true if one of the values of this key matches one of the values of key2
}
}