所以基本上我有一个简单的remove
函数,如果id匹配,则将学生从我的列表中取出。在编写此方法时,我使用==
,因为s.getId()
返回原始类型。但是我写了一个.equals
方法,应该覆盖它,但现在我不能在s.getId()
上调用.equals
。
Student
类equals
方法:
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注释,该注释指示编译器打算重写方法在超类中。如果,由于某种原因,编译器检测到如果该方法不存在于任何超类中,则该方法不存在将生成一个错误。