Java中Graph报错:不兼容类型,Vertex无法转换为String
解决“不兼容类型:Vertex无法转换为String”编译错误
我一眼就定位到问题所在了:你的removeVertex方法声明的返回类型是String,但方法最后直接返回了Vertex类型的对象v,这就造成了类型不匹配的编译错误。
先看你提供的出错代码:
public String removeVertex(Vertex v) { for (Edge e : incidentEdges(v)) { edges.remove(e); vertices.remove(v); } return v; // 这里就是错误的核心 }
另外还要提一句:你把vertices.remove(v)放在循环体里是不合理的——第一次循环就会把顶点从集合中移除,后续遍历关联边的操作可能会出现异常,这个逻辑也需要修正。
下面给你两种可行的修复方案:
方案一:保持返回String类型,返回Vertex的字符串属性
如果你的业务逻辑确实需要返回String,那应该返回Vertex对象的某个字符串属性(比如假设Vertex类有getId()或getName()这类返回String的方法):
public String removeVertex(Vertex v) { // 先移除所有关联边 for (Edge e : incidentEdges(v)) { edges.remove(e); } // 最后移除顶点 vertices.remove(v); // 返回Vertex的字符串属性,比如getName() return v.getName(); }
方案二:修改方法返回类型为Vertex
如果方法的目的是返回被移除的顶点对象,那直接修改方法的返回类型即可:
public Vertex removeVertex(Vertex v) { for (Edge e : incidentEdges(v)) { edges.remove(e); } vertices.remove(v); return v; }
核心问题就是返回值的类型声明和实际返回对象的类型不匹配,同时调整顶点移除的位置能避免潜在的运行时异常哦。
内容的提问来源于stack exchange,提问作者okmijn
相关产品推荐
相关产品推荐

