我正在开发一个应用程序(JAVA应用程序),它使用Graph作为其基本数据结构。我使用java Collection实现了这个图形。我做了一个列表
List<Edge<T>> list=new ArrayList<Edge<T>>();
则传递值为list.add(e1,e2);
,其中e1和e2为Edge类型。但是编译器给出了不兼容的类型错误,指出Edge不能转换为int。有人可以帮助我理解它背后的原因,因为我在程序中使用add()的其他地方都工作得很好。下面给出了带有Edge类的有问题的方法。
public void removeTr(){
for(Vertex<T> v1:vertices){
Iterator<Edge<T>> itr=v1.out.iterator();
List<Edge<T>> list=new ArrayList<Edge<T>>();
while(itr.hasNext()){
Edge<T> e1=itr.next();
Vertex<T> v2=e1.getTo();
Iterator<Edge<T>> iter=v2.out.iterator();
while(iter.hasNext()){
Edge<T> e2=iter.next();
Vertex<T> v3=e2.getTo();
if(v3!=null){
list.add(e1,e2);//THIS IS THE ERROR MAKING STATEMENT
break;
}
}
}
minimizeTr((ArrayList<Edge<T>>)list);
}
}
class Edge<T>{
int cost;
Vertex<T> gIn;
Vertex<T> gOut;
public Edge(Vertex<T> from, Vertex<T> to, int cost){
this.cost=cost;
gOut=from;
gIn=to;
from.setOut(this);
to.setIn(this);
}
public Vertex<T> getFrom(){
return gOut;
}
public Vertex<T> getTo(){
return gIn;
}
public void appendCost(int c){
this.cost=this.cost+c;
}
}
编译器报错,因为java.util.List<E>
中没有定义方法add(E, E)
。编译器可以为代码中给定的参数找到的最接近的方法是add(int index, E e)
,参见JavaDoc。
所以编译器假设你想调用2参数方法add(int, E)
,但你的第一个参数不是int
类型,而是Edge
类型,这就是为什么你得到这个错误。