很多人不喜欢使用instanceof
,但我发现在很多情况下,我们在equals
方法方面几乎没有其他选择。看看下面的课程:
class A {
int n;
public A(int n) { this.n = n; }
@Override
public boolean equals(Object o) {
return false;
}
public boolean equals(A o) {
return n == o.n;
}
}
我从来没有见过这样的事情,但它是否可以替代必须使用instanceof
来测试Object
是A
?还是有其他我不想的问题?
答案 0 :(得分:7)
它是否可以替代必须使用instanceof来测试Object是否为A?
没有。这是因为调用的方法是静态选择的,即在大多数情况下只会调用equals(object o)
。
你可以写
@Override
public boolean equals(Object o) {
return o instanceof A && n == ((A) o).n;
}
答案 1 :(得分:0)
使用equals
的集合,Swing组件和其他类仍将调用equals(Object o)
版本,并始终返回false
。
该示例仅在显式调用equals(A o)
方法时才有效。
答案 2 :(得分:0)
这段代码重载不会覆盖equals。另外不要忘记检查o == null。替换为instanceof包括getClass()。equals(other.getClass())并使用A.isAssignableFrom(other.getClass())