Как создать метод Equals

Мне нужна помощь в создании метода equals.

Метод: логическое значение equals(Zombie other)
В описании конкретно сказано: "Принимает другой объект Zombie в качестве аргумента и возвращает true, если у зомби такое же имя и такая же степень заражения, оружие(я) и мозги, как у другого зомби."

Я не понимаю, как бы я разделил зомби на отдельные части, чтобы сравнить их с переменными экземпляра, тогда как я бы сравнил все части.


person JessNicole27    schedule 11.11.2013    source источник


Ответы (1)


Это будет правильная реализация equals() в вашем случае.

    @Override
    public boolean equals(Object obj) {

        if (obj instanceof Zombie){

            Zombie zombiObj= (Zombie) obj;

            if(zombiObj.getName().equals(this.getName()) &&
                zombiObj.getInfection().equals(this.getInfection())&&
                zombiObj.getWeapon().equals(this.getWeapon()) &&
                zombiObj.getBrain()== this.getBrain() ) {

                return  true;
            }else{
                return false;

            }
        } else{

            return false;
        } 
    }
person Dark Knight    schedule 11.11.2013
comment
@ JessNicole27, надеюсь, это решит твою проблему.. - person Dark Knight; 11.11.2013
comment
Это было, но все для одной части, она хочет, чтобы мы сравнили мозги, и это целое число. jGrasp сказал, что я не могу уважать это, так как бы я это сделал? - person JessNicole27; 11.11.2013
comment
Обратитесь к обновленному сообщению, добавлено условие равенства мозгов для типа int. - person Dark Knight; 11.11.2013
comment
Это сработало, большое спасибо! - person JessNicole27; 11.11.2013
comment
Обратите внимание, что вам также необходимо переопределить hashCode, если вы переопределяете equals! (Два объекта, которые равны в соответствии с equals(), должны возвращать один и тот же хэш-код) - person isnot2bad; 11.11.2013
comment
@isnot2bad: здесь мы сравниваем объекты, используя их содержимое. Здесь HashMap/Map не используется. И, следовательно, реализация hashCode() здесь не является обязательной. Пожалуйста, поправьте меня, если я неправильно понял ваш комментарий. - person Dark Knight; 11.11.2013
comment
@DarkKnight не имеет значения. Отсутствие переопределения hashCode нарушает контракт java.lang.Object. Возможно, сейчас это не имеет никакого эффекта, но это все равно неправильно. Почти с уверенностью можно сказать, что когда-нибудь кто-нибудь поместит зомби в HashMap/-Set. Тогда, пожалуйста, не возвращайтесь сюда и не спрашивайте, почему это не работает/ведет себя странно... ;). См. также stackoverflow.com/questions/27581/ - person isnot2bad; 11.11.2013
comment
@isnot2bad Поскольку текущее определение проблемы не включает ссылку на карту, не включает хэш-код (). Также, чтобы переопределить hashcode(), нам нужно иметь четкое представление о том, что все поля Zombie не изменятся и могут быть использованы здесь. Al жесткий я согласен с вашей точкой зрения. Спасибо - person Dark Knight; 11.11.2013
comment
@DarkKnight Вы правы, изменение полей проблематично. Но только если объект уже находится внутри HashMap/-Set. Контракт hashCode не запрещает использовать поля, которые могут изменяться. Просто не помещайте объекты в HashSet, а затем изменяйте их. Я предлагаю просто правильно переопределить hashCode (это не имеет большого значения и не наносит вреда). - person isnot2bad; 11.11.2013
comment
давайте продолжим это обсуждение в чате - person isnot2bad; 11.11.2013
comment
Если у другого зомби нет оружия (zombiObj.getWeapon() возвращает null, приводит к NullPointerException - person cdalxndr; 26.02.2021