นอกเหนือจากคำตอบอื่น ๆ แล้วยังมีอีกเหตุผลที่วิธีการที่ควรยอมรับObject
ซึ่งเป็นเพรดิเคต พิจารณาตัวอย่างต่อไปนี้:
class Person {
public String name;
// override equals()
}
class Employee extends Person {
public String company;
// override equals()
}
class Developer extends Employee {
public int yearsOfExperience;
// override equals()
}
class Test {
public static void main(String[] args) {
Collection<? extends Person> people = new ArrayList<Employee>();
// ...
// to remove the first employee with a specific name:
people.remove(new Person(someName1));
// to remove the first developer that matches some criteria:
people.remove(new Developer(someName2, someCompany, 10));
// to remove the first employee who is either
// a developer or an employee of someCompany:
people.remove(new Object() {
public boolean equals(Object employee) {
return employee instanceof Developer
|| ((Employee) employee).company.equals(someCompany);
}});
}
}
ประเด็นก็คือวัตถุที่ถูกส่งผ่านไปยังremove
วิธีการมีหน้าที่รับผิดชอบในการกำหนดequals
วิธีการ การสร้างภาคแสดงเป็นวิธีที่ง่ายมาก