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

我正在尝试从泛型类型调用“等于”方法。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


HUX布斯
浏览 52回答 1
1回答

慕田峪4524236

您不是在重写 ,而是在重载它(相同的方法名称,不同的签名)。若要正确重写 自,必须匹配方法签名。这意味着您的方法必须采用 一个 ,而不是一个。equalsequalsObjectequalsObjectPersonpublic&nbsp;boolean&nbsp;equals(Object&nbsp;o)&nbsp;{&nbsp;&nbsp;//&nbsp;...最好在任何方法上包含注释,这些方法旨在重写超类中的方法或从接口实现方法。如果您这样做了,那么编译器会提醒您您的方法没有重写 。@Overrideequals@Override public&nbsp;boolean&nbsp;equals(Object&nbsp;o)&nbsp;{&nbsp;&nbsp;//&nbsp;...这也意味着,在转换和比较成员值之前,您需要测试传入的对象是否确实是 。Person根据哈希代码合约,覆盖与 一致也是很好的做法。hashCodeequals
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java