0
從技術上壞的設計有一個地圖,Foo1和foo2的可能在技術上是平等的,但你還是希望他們有關於他們,使得不同的特質:地圖與同一對象鍵值
Foo foo2 = new Foo("id1", 4);
Foo foo1 = map.get(foo2);
if(foo1 != null){
map.replace(foo1, foo1.combine(foo2));
}
隱而不宣」這在技術上違反了「等於」?我注意到在Multiset
中沒有get
這個函數是有道理的,因爲如果這個集合包含了這個對象,那麼你已經擁有了它,所以不需要去檢索它。
但在同一時間,好像過殺有一個地圖,其中包含鍵和值相同的對象這就是爲什麼我一直在尋找到多集
編輯:結合返回相同的對象仍然「等於「但結合了屬性。
I.E.
public class Foo {
String id;
int length;
public combine(Foo foo){
this.length += foo.length;
return this;
}
@Override equals(Object o){
...
return this.id == that.id;
}
什麼是組合()' – OPK
只是將兩者結合到同一個對象,即如果foo1和foo2有長度,那麼它會將長度加在一起。但它仍然返回包含相同「等於」屬性的對象。 –
等於應該唯一標識一個對象。如果你想要上述行爲,那麼foo1和foo2應該爲hashCode()返回相同的值。你應該根據我的想法合併它們。然後調用containsKey(foo1)並在該基礎上進行合併操作。 – pandaadb