for-each在Java中尝试转换元素类型

时间:2014-05-31 15:45:38

标签: java eclipse arraylist foreach iterator

在ArrayList上使用for-each构造时,我遇到了Java问题。 在一个名为Graph的类中,我有受保护的属性

protected ArrayList<Edge<E>> edges

在我的Edge类中,我有受保护的属性

protected LinkedList<Connector<E>> pointers;

我在Edge类中尝试做的是定义一种方法,在屏幕上打印每个图形边缘的指针 g 。我尝试使用不同的方法每次都得到错误,然后我最终使用for-each循环(我认为这是最好的选择,因为我知道集合中我尝试迭代的元素的类型)。 我的代码如下:

public void printConnectors(Graph g){
    for (Edge<E> e: g.edges){
    System.out.println(e.iterator()); //I do have an iterator in my Edge class
    }
}

这不起作用,Eclipse给了我以下错误:

  

类型不匹配:无法从元素类型Object转换为Edge

我知道这可能是一个愚蠢的错误,这些错误来自我在代码中看不到的内容,但我无法让它发挥作用。任何人都可以帮助我解释为什么编译器尝试从Object转换为Edge,即使edge应该是Edgeges的ArrayList吗?

1 个答案:

答案 0 :(得分:4)

您正在使用原始类型。代码应该是:

public void printConnectors(Graph<E> g) { // use the generic type Graph<E> here,
                                          // not the raw type Graph
    for (Edge<E> e: g.edges) {
        System.out.println(e.iterator()); 
    }
}

What is a raw type and why shouldn't we use it?