【发布时间】:2014-01-05 03:39:57
【问题描述】:
我有一个 Node<T> 和一个 equals() 方法:
public boolean equals(Node<T> other) {
if (this == other)
return true;
if (other == null)
return false;
if (!obj.getClass().equals(other.getObject().getClass()))
return false;
return obj.equals(other.getObject());
}
我只关心我的节点中保存的对象是否等于另一个节点中保存的对象(因为两个相等的对象可以保存在我的列表中的不同位置)。
我持有的对象是Token。 Token.equals() 方法有效,而我的 Node.equals() 方法无效:
public class TokenEqualityTest {
public static void main(String[] args) {
Token t = new Token(0);
Token q = new Token(0);
System.out.println("t.equals(q): " + t.equals(q));
Node<Token> tnode = new Node<Token>(null, null, t);
Node<Token> qnode = new Node<Token>(null, null, q);
System.out.println("tnode.equals(qnode): " + tnode.equals(qnode));
}
}
哪个打印:
t.equals(q): true
tnode.equals(qnode): false
如果我在 Token.equals() 处设置断点并运行 eclipse 调试器,我的代码将停止一次(在 t.equals(q) 处)。这表明Node<Token>.equals() 确实不 调用Token.equals,并且我已经验证调试器确实通过了return obj.equals(other.getObject()); 行。
当我声明了Node<Token> 后,为什么我的Node.equals 不调用Token.equals?
【问题讨论】:
-
您使用的是
equals(Node<T> other),而基类的正确重载应该是equals(Object other)。
标签: java