Переопределение метода .equals ()

1

Таким образом, в основном у меня есть простая функция remove которая выводит учащихся из моего списка, если идентификаторы совпадают. При написании этого метода я использую == поскольку s.getId() возвращает примитивный тип. Но я написал метод .equals который должен переопределить его, но теперь я не могу вызвать .equals на s.getId().

equals метод в классе Student:

public boolean equals(StudentIF other) {
    if (other == null) {
        return false;
    }
    if (this.id == other.getId()) {
        return true;
    }
    return false;
}

а затем мой метод remove который находится в классе LL:

public boolean remove(StudentIF s) {
    // TODO Auto-generated method stub
    StudentLLNode current = head;
    if (s == null) {
        return false;
    }
    if (s.getId() == (head.getStd().getId())) {
        // StudentLLNode top = head;
        head = head.getNext();
        size--;
        return true;
    } else {
        StudentLLNode previous, next;
        previous = current;
        next = current.getNext();
        while (current != null) {
            next = current.getNext();
            if (s.getId() == (current.getStd().getId())) {
                previous.setNext(next);
                size--;
                return true;
            }
            previous = current;
            current = next;
        }
    }
    return false;
}
  • 6
    По умолчанию equals ожидает Object не StudentIF , если вы добавите аннотацию @Override в свой метод equals вы получите ошибку компилятора, поскольку вы фактически не переопределяете метод любого родительского класса.
  • 0
    Почему это не ответ?
Теги:
linked-list
equals

2 ответа

3

Метод equals получает параметр Object as, вот как NetBeans автоматически генерирует метод equals для класса.

@Override
public boolean equals(Object obj) {
    if (obj == null) {
        return false;
    }
    if (getClass() != obj.getClass()) {
        return false;
    }
    final Person other = (Person) obj;
    if ((this.name == null) ? (other.name != null) : !this.name.equals(other.name)) {
        return false;
    }
    return true;
}
3

Метод equals объекта принимает вход типа Object. Правильная подпись для метода equals:

public boolean equals(Object other)

Аннотации @Override - отличная помощь для определения того, правильно ли вы переопределили метод.

Из учебника оракула:

При переопределении метода вы можете использовать аннотацию @Override, которая указывает компилятору, что вы собираетесь переопределить метод в суперклассе. Если по какой-то причине компилятор обнаруживает, что метод не существует в одном из суперклассов, тогда он будет генерировать ошибку.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню