Java重写Object equals()方法

use*_*514 6 java generics object

如何覆盖对象类中的equals方法?

即我有

class Person{

//need to override here
public boolean equals (Object obj){

}
Run Code Online (Sandbox Code Playgroud)

我想将参数obj转换为类型Person,但如果我(Person)obj它将无法工作.

Dan*_*aro 10

它实际上比你想象的要复杂得多.让Eclipse(或你正在使用的任何IDE)自动生成一个equals方法; 在进行比较之前,你会看到它包含一些检查和强制转换.

另见:http://www.javapractices.com/topic/TopicAction.do?Id=17


two*_*ate 8

@Override
public boolean equals(Object o) 
{
    if (o instanceof Person) 
    {
      Person c = (Person) o;
      if ( this.FIELD.equals(c.FIELD) ) //whatever here
         return true;
    }
    return false;
}
Run Code Online (Sandbox Code Playgroud)

  • 很多我不喜欢那个代码,但是我被迫为`@Override` +1. (3认同)

pgm*_*ura 7

您可以将其强制转换为方法,只需使用实例确保它是正确的类型

if(obj instanceof Person)
{
   Person otherPerson = (Person) obj;
   //Rest of the code to check equality
}
else
{
//return false maybe
}
Run Code Online (Sandbox Code Playgroud)


cle*_*tus 5

看一下关于对象比较.

请注意,如果您覆盖,equals()您还必须覆盖hashCode().equals/hashCode契约是如果两个对象相等,则它们必须具有相同的哈希码.