覆盖.equals()方法

时间:2014-07-31 02:28:49

标签: java linked-list equals

所以基本上我有一个简单的remove函数,如果ID匹配,它会将学生从我的列表中删除。在编写此方法时,我使用==,因为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;
}

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:3)

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

public boolean equals(Object other)

@Override注释可以帮助您确定是否正确覆盖了某个方法。

来自oracle tutorial

  

覆盖方法时,您可能想要使用@Override   指示编译器您要覆盖的注释   超类中的方法。如果由于某种原因,编译器检测到   该方法在其中一个超类中不存在,那么它   会产生错误。