迭代器的类型错误

时间:2013-12-30 18:55:08

标签: java

我正在研究java中的项目,我正在为自定义组件开发API。我使用名为DrawHandler的接口来允许组件绘制到图形对象。要在每次添加组件时执行此操作,我需要将其DrawHandler添加到列表中。我正在使用此代码

    public void addComponent(Component c){
         //Add to list of components
         components.add(c);
         //Add all of the components drawHandlers so the component can be drawn
         List<DrawHandler> dhs = c.getDrawHandlers();
         Iterator<DrawHandler> i = dhs.iterator();
         while(i.hasNext()){
            addDrawHandler(i.next());
         }
    }

然而,当我在这一行收到错误时

 Iterator<DrawHandler> i = dhs.iterator();

和这一行

addDrawHandler(i.next())

错误是:

  

next()的类型是错误的:其中E是一个类型变量:       E扩展了在接口Iterator中声明的Object

如果我将此代码用作sugested

    public void addComponent(Component c){
    //Add to list of components
    components.add(c);
    //Add all of the components drawHandlers so the component can be drawn
    for(DrawHandler handler : c.getDrawHandlers())
        addDrawHandler(handler);
}

编译时出现此错误:
线程“main”中的异常java.lang.RuntimeException:无法编译的源代码 - 错误的树类型:windows.DrawHandler     在windows.MainWin.addComponent(MainWin.java:37)     在windows.Main.main(MazeNavigator.java:21) 任何建议?我究竟做错了什么?谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

它不能解释您的错误,但如果您编写

,您可能会发现它编译得很好
for(DrawHandler handler : c.getDrawHandlers())
    addDrawHandler(handler);
  

无法编译的源代码 - 错误的树类型:windows.DrawHandler

这意味着您正在使用一个允许您运行无法编译的代码的选项。我建议您关闭此选项,您应该看到错误的真正原因。