在equals方法中避免使用instanceof的可行方法?

ars*_*jii 2 java equals instanceof

许多人不喜欢使用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;
    }   
}
Run Code Online (Sandbox Code Playgroud)

我从来没有见过像这样的东西,但它可以作为一个替代品,instanceof用来测试一个Object是不是A?或者还有其他我没想过的问题?

Pet*_*rey 7

它可以作为必须使用instanceof来测试Object是否为A的替代品?

不.这是因为调用的方法是静态选择的,即equals(object o)在大多数情况下只会被调用.

你可以写

@Override
public boolean equals(Object o) {
    return o instanceof A && n == ((A) o).n;
}
Run Code Online (Sandbox Code Playgroud)