覆盖 equals()

问题描述

我正在尝试覆盖我的类 Vertex 的 equals() 方法。每个顶点都有一个字段 String source

如果参数 other_vertex 不是 Vertex 实例,我希望 equals() 返回 false。 如果参数 other_vertex 是一个 Vertex 实例,我想测试源字符串是否相等(认 String equals(),如果真返回真,假返回假。

我的错误代码

@Override
    public boolean equals(Object other_vertex) {
        if (!(other_vertex instanceof Vertex)) { 
            return false; 
        } 
        else {
            return (this.getSourceString()).equals(other_vertex.getSourceString());
        }
    }

这给了我第 7 行的编译器错误“未定义对象类型的 getSourceString() 方法”。 getSourceString() 是为顶点正确定义的。

如何编写代码让编译器识别出只有 other_vertex 是顶点时才会执行?

解决方法

通知

public boolean equals(Object other_vertex) {
                      ^^^^^^

您必须将 other_vertex 转换为 Vertex 才能访问该方法。

return (this.getSourceString()).equals(((Vertex)other_vertex).getSourceString());

这是安全的,因为您已经确定向下转换是有效的。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...