java为什么要将equals方法输入参数设为Object

jhl*_*u87 13 java types equals

我正在阅读一本关于数据结构的书.目前我在图表上,下面的代码是图表的顶点部分.

class Vertex<E>{
    //bunch of methods

    public boolean equals(Object o){
         //some code
    }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试实现这个equals方法时,我的编译器抱怨没有检查参数的类型,只是允许任何对象被发送.对我来说,为什么该参数不应该是Vertex而不是Object,这似乎有点奇怪.有没有理由为什么作者这样做或者这是一个错误或过时的例子?

Eng*_*uad 15

@Override
public boolean equals(Object obj)
{
     if(obj == null) return false;
     else if (!(obj instanceof Vertex)) return false;
     else return // blah blah
}
Run Code Online (Sandbox Code Playgroud)

  • @Hovercraft Full Of Eels,@ Eng.Fouad:我不同意.当被测对象为null时,instanceof始终返回false.因此,空值的测试是多余的. (4认同)

Jea*_*sky 10

equals(Object)是root - Object中定义的方法.如果您不完全匹配签名,则当有人检查两个对象是否相等时,将调用Object的版本.不是你想要的.

你可能已经看过其他方法(如比较器),你可以使用确切的时间.那是因为这些API与Jav​​a 5是通用的.等于不能是因为用两种不同类型调用equals是有效的.它应该返回false,但它是有效的.