【发布时间】:2023-03-16 23:19:02
【问题描述】:
我有一些代码尝试使用HashSet.retainAll() 函数。
在下面的示例代码中,HashSet 包含接口IPerson,但对象Person 中的equals 函数从未到达。我什至尝试在界面和其他一些东西中公开 equals 函数。我觉得我已经尝试了一切。如何让retainAll() 使用我实现的 equal 函数?
class Person implements IPerson {
private String name;
public Person(String name){
this.name = name;
}
@Override
public boolean equals(Object obj){
System.out.println("calling equals");
return super.equals(Object obj);
}
}
HashSet<IPerson> persons1 = new HashSet<IPerson>();
persons1.add(new Person("Jane"));
persons1.add(new Person("Joel"));
persons1.add(new Person("Joe"));
HashSet<IPerson> persons2 = new HashSet<IPerson>();
persons2.add(new Person("Jane"));
persons2.add(new Person("Joel"));
persons1.retainAll(persons2);
// expect sysout from Person.equals()
System.out.println(persons1.size());
// prints 0
【问题讨论】:
-
super.equals(Object obj);在做什么?private name;是另一个...请至少注意发布可编译代码。
标签: java collections equals