【发布时间】:2021-02-19 01:47:02
【问题描述】:
我正在尝试为我的 Vertex 类覆盖 equals() 方法。每个顶点都有一个字段String source。
如果参数 other_vertex 不是 Vertex 实例,我希望 equals() 返回 false。 如果参数other_vertex是一个Vertex实例,我想测试源字符串是否相等(默认String equals(),如果true返回true,如果false返回false。
我的错误代码是
@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 是顶点时才会执行此操作?
【问题讨论】:
-
你必须投射它,比如
((Vertex)other_vertex).getSourceString()。 -
表达式
(other_vertex instanceof Vertex)不会隐式转换other_vertex,它只检查类型。必须在else-block:Vertex asVertex = (Vertex) other_vertex;中显式地转换它。或者,对于 Java 14+,可以使用模式匹配:} else (other_vertex instanceof Vertext asVertex) { ... }。顺便说一句:在Java中,变量名应该写成camelCase,而不是snake_case。
标签: java casting overriding equals