java 为什么应该等于方法输入参数是对象

2022-09-03 04:17:00

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

class Vertex<E>{
    //bunch of methods

    public boolean equals(Object o){
         //some code
    }
}

当我尝试实现这个等于方法时,我的编译器抱怨没有检查参数的类型,只允许发送任何对象。对我来说,为什么该参数不应该是顶点而不是对象,这似乎有点奇怪。作者这样做是有原因的,还是有些错误或过时的例子?


答案 1
@Override
public boolean equals(Object obj)
{
     if (!(obj instanceof Vertex)) return false;
     else return // blah blah
}

答案 2

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

您可能已经看过其他方法(如比较器),您可以在其中使用确切的时间。这是因为这些 API 是用 Java 5 通用的。等于不能,因为使用两个单独的类型调用等于是有效的。它应该返回 false,但它是有效的。