我正在寻找一种通过引用传递方法的方法。我知道 Java 不会将方法作为参数传递,但是,我想得到一个替代方法。
有人告诉我接口是将方法作为参数传递的替代方法,但我不明白接口如何通过引用充当方法。如果我理解正确的话,接口只是一组未定义的抽象方法。我不想每次都发送一个需要定义的接口,因为几个不同的方法可以使用相同的参数调用相同的方法。
我想要完成的是与此类似的事情:
public void setAllComponents(Component[] myComponentArray, Method myMethod) {
for (Component leaf : myComponentArray) {
if (leaf instanceof Container) { //recursive call if Container
Container node = (Container) leaf;
setAllComponents(node.getComponents(), myMethod);
} //end if node
myMethod(leaf);
} //end looping through components
}
调用如:
setAllComponents(this.getComponents(), changeColor());
setAllComponents(this.getComponents(), changeSize());
原文由 Mac 发布,翻译遵循 CC BY-SA 4.0 许可协议
_编辑_:从 Java 8 开始, lambda 表达式 是一个很好的解决方案,正如 其他 答案 所指出的那样。下面的答案是为 Java 7 及更早版本编写的…
看看 命令模式。
编辑: 正如 Pete Kirkham 指出 的那样,还有另一种使用 Visitor 执行此操作的方法。访问者方法稍微复杂一点——你的节点都需要使用
acceptVisitor()
方法来感知访问者——但如果你需要遍历更复杂的对象图,那么它值得研究。