我正在嘗試從泛型類型調用“等于”方法。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
提交
取消