为了账号安全,请及时绑定邮箱和手机立即绑定

为泛型类型调用重载方法“等于”

为泛型类型调用重载方法“等于”

HUX布斯 2022-09-28 10:21:48
我正在尝试从泛型类型调用“等于”方法。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个赞

您不是在重写 ,而是在重载它(相同的方法名称,不同的签名)。若要正确重写 自,必须匹配方法签名。这意味着您的方法必须采用 一个 ,而不是一个。equalsequalsObjectequalsObjectPerson

public boolean equals(Object o) {  // ...

最好在任何方法上包含注释,这些方法旨在重写超类中的方法或从接口实现方法。如果您这样做了,那么编译器会提醒您您的方法没有重写 。@Overrideequals

@Override
public boolean equals(Object o) {  // ...

这也意味着,在转换和比较成员值之前,您需要测试传入的对象是否确实是 。Person

根据哈希代码合约,覆盖与 一致也是很好的做法。hashCodeequals


查看完整回答
反对 回复 2022-09-28
  • 1 回答
  • 0 关注
  • 50 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信