Объект переопределения Java равняется () методу

То, как я переопределяю, равняется методу в классе объекта?

т.е. я имею

class Person{

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

}

Я хочу преобразовать параметр obj в Человека типа, но если я сделаю (Человек) obj, то он не будет работать.

6
задан user69514 23 February 2010 в 05:03
поделиться

7 ответов

Вы можете преобразовать его внутри метода, просто убедитесь, что он имеет правильный тип, используя экземпляр

if(obj instanceof Person)
{
   Person otherPerson = (Person) obj;
   //Rest of the code to check equality
}
else
{
//return false maybe
}
7
ответ дан 8 December 2019 в 02:29
поделиться

На самом деле это сложнее, чем вы думаете. Попросите Eclipse (или любую другую IDE, которую вы используете) автоматически сгенерировать метод equals; вы увидите, что он содержит несколько проверок и приведений, прежде чем выполнить сравнение.

Также см. здесь: http://www.javapractices.com/topic/TopicAction.do?Id=17

10
ответ дан 8 December 2019 в 02:29
поделиться
@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;
}
8
ответ дан 8 December 2019 в 02:29
поделиться

Взгляните на Относительно сравнения объектов .

Имейте в виду, что если вы переопределите equals () , вы должны также переопределить hashCode () . Контракт equals / hashCode заключается в том, что если два объекта равны, они должны иметь одинаковый хэш-код.

5
ответ дан 8 December 2019 в 02:29
поделиться

Если вы планируете создать подклассы Person, используйте что-то вроде

if (obj! = Null && obj.getClass () == Person.class )

, а не instanceof

3
ответ дан 8 December 2019 в 02:29
поделиться

Еще один момент, который может быть полезным, если вы переопределите метод equals () (а также метод hashcode () ), вы можете для сравнения двух объектов одного класса, как показано ниже:

Person p1 = new Person();
Person p2 = new Person();

....

if ( p1.equals( p2 ) )

{
   // --- Two Persons are equal, w.r.t the fields you specified in equals method ---

}
0
ответ дан 8 December 2019 в 02:29
поделиться

Единственная причина использовать getClass(), а не instanceof - это если нужно утверждать, что обе сравниваемые ссылки указывают на объекты одного и того же класса, а не на объекты, реализующие один и тот же базовый класс.

Скажем, у нас есть Employee e и Manager m (расширяет Employee).

m instanceof Employee выдаст true, m.getClass() == Employee.class вернет false.

В некоторых случаях последнее может быть предпочтительнее, но редко, в случае сравнения экземпляров в методах equals() или hashCode().

2
ответ дан 8 December 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: