2016-03-18 7 views
0

Ich habe eine Implementierung in Java von Policy Objekte erstellt, die für eine bestimmte Namespace gelten.Karte mit einem mehrwertigen Schlüssel?

Sie sind in einer Struktur Map<Namespace,List<Policy>> gespeichert, so dass ich die Richtlinien für einen bestimmten Namespace leicht durch Aufruf von .containsKey() und .get() auf der Karte abrufen können. Dazu habe ich equals() und hashCode() nach JVM-Regeln überschrieben. Hat gut funktioniert.

Nun sind die Anforderungen ändern sich, und ein Namespace besteht plötzlich aus einer Liste von Werten, bei denen die Gleichheit Regel ist „einer der Werte müssen übereinstimmen“. Mit anderen Worten, wenn einer der in Namespace A gespeicherten Werte mit einem der in Namespace B gespeicherten Werte übereinstimmt, sind sie gleich.

Offensichtlich funktioniert das Überschreiben hashCode() nicht mehr, da ich nicht weiß, welchen Wert der Code darstellen soll.

Wie kann ich mein Design am besten an die neue Gleichheitsregel anpassen? Sollte ich noch eine Map verwenden oder gibt es ein Muster, das zu meinem Fall passt?

Antwort

0

Wenn ich die Anforderungen richtig verstehen müssen Sie etwas wie folgt aus:

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 
    } 
} 
+0

Genau. Allerdings ruft 'HashMap' die Methode' hashCode() 'auf meinen Schlüsseln auf - was passiert, wenn alle Schlüssel * 1 * zu diesem Aufruf zurückgeben? Ist das nicht gegen JVM-Regeln? – mvreijn

Verwandte Themen