Упражнение «Сравнение предметов» (Java) - PullRequest
0 голосов
/ 09 мая 2020

надеюсь, это не заставляет меня казаться идиотом, но я, похоже, не справляюсь с простым упражнением, где мне нужно сравнить два объекта, чтобы проверить, равны ли они, мой Java класс ниже вместе с ошибкой сообщение, которое я получаю от упражнения. Кто-нибудь знает, как это решить? Заранее спасибо.

import java.util.Objects;

public class Person {

    private String name;
    private SimpleDate birthday;
    private int height;
    private int weight;

    public Person(String name, SimpleDate birthday, int height, int weight) {
        this.name = name;
        this.birthday = birthday;
        this.height = height;
        this.weight = weight;
        hashCode();
    }
    public String getName(){
        return this.name;
    }
    public SimpleDate getBirthday(){
        return this.birthday;
    }
    public Integer getHeight(){
        return this.height;
    }
    public Integer getWeight(){
        return this.weight;
    }
    // implement an equals method here for checking the equality of objects
    @Override
    public boolean equals(Object compared){
        return this==compared;
    }
}

Сообщение об ошибке

Ответы [ 2 ]

4 голосов
/ 09 мая 2020

Джошуа Блох в Эффективном Java дает рекомендации о том, как написать красивую .equals(). Вот отрывок прямо из книги:

  1. Используйте оператор ==, чтобы проверить, является ли аргумент ссылкой на этот объект.

  2. Используйте оператор instanceof, чтобы проверить, имеет ли аргумент правильный тип.

  3. Приведите аргумент к правильному типу.

  4. Для каждого «Значительное» поле в классе, проверьте, совпадает ли это поле аргумента с соответствующим полем этого объекта.

  5. Когда вы закончите писать свой метод equals, задайте себе три вопроса: это симметрично c? Это переходно? Это согласованно?

    public boolean equals(Object o) {
        if(o == this) {
            return true;
        }
        if(!(o instance of Person)) {
            return false;
        }
       //you comparing logic here
    }
    

Вы должны убедиться, что equals следует своему контракту (это отношение эквивалентности). См. Документацию для более подробной информации. Кроме того, переопределите метод hashcode().

Метод You equals написан неправильно, так как он просто сравнивает расположение объектов в памяти. Вот почему ваши тесты терпят неудачу.

0 голосов
/ 09 мая 2020

Вы изменили поведение equals на == здесь:

@Override
 public boolean equals(Object compared){
        return this==compared;
 }

и вот уже ответ - { ссылка }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...