重写.equals()方法



所以基本上我有一个简单的remove函数,如果id匹配,则将学生从我的列表中取出。在编写此方法时,我使用==,因为s.getId()返回原始类型。但是我写了一个.equals方法,应该覆盖它,但现在我不能在s.getId()上调用.equals

Studentequals方法:

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;
}

equals方法接收一个Object作为参数,下面是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;
}

对象类equals方法接受类型为Object的输入。equals方法的正确签名为:

public boolean equals(Object other)

@Override注释是一个很大的帮助,以确定您是否正确地覆盖了一个方法。

From oracle tutorial:

当重写一个方法时,你可能想使用@Override注释,该注释指示编译器打算重写方法在超类中。如果,由于某种原因,编译器检测到如果该方法不存在于任何超类中,则该方法不存在将生成一个错误。

相关内容

  • 没有找到相关文章

最新更新