我必須錯過Equivalence.wrap()
的一些東西,但是下面的測試對我來說是失敗的 - 只在最後一行使用番石榴18.0。爲什麼?我究竟做錯了什麼?我的目標是通過將等效對象添加到一個集合中來刪除等效對象。如何使用Equivalence.wrap()來重複數據刪除?
@Test
public void testEquivalenceWrap()
{
final Equivalence<Program2> eq = EquivalentIfIDsEven.INSTANCE;
Program2 p1 = new Program2();
p1.setId(2L);
Program2 p2 = new Program2();
p2.setId(4L);
//sanity-test equivalence impl
assertFalse(p1.equals(p2));
assertTrue(eq.equivalent(p1, p2));
assertTrue(eq.wrap(p1).equals(eq.wrap(p2)));
//dedupe in set
final Set<Equivalence.Wrapper<Program2>> set = new HashSet<>();
set.add(eq.wrap(p1));
set.add(eq.wrap(p2));
assertEquals(1, set.size()); //FAIL: size == 2
}
你是正確的!我的'Equivalence.doHash()'impl不滿足可分配的屬性。即'doHash(p1)!= doHash(p2)' - 不正確。 – Nikita 2014-12-03 18:50:19