我正在尝试从泛型类型调用“等于”方法。On run time the type has an overload for 'equals' but the Object.equals(Object obj) is still triggered.这是调用“等于”的泛型类。public class SortedGroup <T> { void func(T element1,T element2) { if (element1.equals(element2)) System.out.println("yes"); else System.out.println("no");}这是重载“等于”的新类型类public class Person { private int ID; public Person(int ID) { this.ID = ID; }... public boolean equals(Person o) { return (this.ID == o.ID); }...}这是主要的。Person p1 = new Person(1);Person p2 = new Person(1);SortedGroup<Person> SG = new SortedGroup<Person>();SG.func(p1,p2);}我希望输出是实际输出yesno
1 回答
慕田峪4524236
TA贡献1875条经验 获得超5个赞
您不是在重写 ,而是在重载它(相同的方法名称,不同的签名)。若要正确重写 自,必须匹配方法签名。这意味着您的方法必须采用 一个 ,而不是一个。equals
equals
Object
equals
Object
Person
public boolean equals(Object o) { // ...
最好在任何方法上包含注释,这些方法旨在重写超类中的方法或从接口实现方法。如果您这样做了,那么编译器会提醒您您的方法没有重写 。@Override
equals
@Override public boolean equals(Object o) { // ...
这也意味着,在转换和比较成员值之前,您需要测试传入的对象是否确实是 。Person
根据哈希代码
合约,覆盖与 一致也是很好的做法。hashCode
equals
添加回答
举报
0/150
提交
取消