我想覆盖equals方法,所以我可以比较两个变量对象,如果它们相等,就像一个具有String" abc"作为变量,另一个对象也有String" abc"作为变量。我需要这个类来管理和解析表达式。
所以我想做一个测试类测试,变量对象是相等的。我想像那样覆盖它。
@Override
public boolean equals(Object obj) {
return this.variable.equals(((Variable) obj).getVariable());
}
现在我的问题是我不太确定这是否会在以后工作,因为我在这里使用equals-method,我之前用它来比较字符串。但是,由于我覆盖它,这并不意味着我现在使用相同的方法吗?或者是使用比较字符串的equals方法的变量字符串?如果那不起作用,我还应该做什么来比较覆盖的equals方法中的String?
答案 0 :(得分:3)
正如@JBNizet所说,如果ClassCastException
不是正确的类型,那么截至目前,您的方法可能会抛出obj
。你应该先解决这个问题:
@Override
public boolean equals(Object obj) {
if (!obj instanceof Variable) {
return false;
}
return this.variable.equals(((Variable) obj).getVariable());
}
话虽这么说,新定义的equals
适用于Variable
个对象,不适用于字符串。 这就是为什么您在此方法中对equals()
的调用仍然有效,如果这是您的问题,因为它引用了String.equals()
,因为您的{{ 1}}字段是variable
(我猜到了),而不是String
。
此外,Variable
只有当您的equals
字段相同时才认为Variable
个对象相等,才应该以这种方式覆盖。