如何在每个项目上迭代并执行一些任意操作?

unj*_*nj2 1 java polymorphism

我有一个具有此功能的Abstract Iterator类

void iterate(){
    while(this.hasnext()){
        ..this.next()..
    }
}
Run Code Online (Sandbox Code Playgroud)

如何传入将应用于下一个元素的任意函数.例如,有办法iterate(print)吗?

jjn*_*guy 9

在Java中,不可能直接将函数作为参数传递.相反,您需要使用一个方法设置接口,如下所示:

interface Operate {
    public void operate(Object o);
}
Run Code Online (Sandbox Code Playgroud)

然后,您需要为要执行的每个不同操作实现接口Object.

一个示例实现.

class Print implements Operate {
    public void operate(Object o){
        System.out.println(o.toString());
    }
}
Run Code Online (Sandbox Code Playgroud)

在您的代码中实现:

iterate(Operate o){
    while(this.hasnext()){
        o.operate(this.next());
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 基本上这是目前唯一的可能性,即使在Java 7中也没有关闭. (2认同)
  • 这是正确的,我想我会指出这被称为命令模式,这是一个非常有用的模式,在你使用它几次之后你会开始本能地使用它. (2认同)