编译时错误,指出我需要传递"int"类型数据,同时对 List<Edge 执行 add() 操作<T>>



我正在开发一个应用程序(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类型,这就是为什么你得到这个错误。

最新更新