gpt4 book ai didi

Java 传递方法作为参数

转载 作者:bug小助手 更新时间:2023-10-28 10:40:18 25 4
gpt4 key购买 nike

我正在寻找一种通过引用传递方法的方法。我知道 Java 不会将方法作为参数传递,但是,我想找一个替代方案。

有人告诉我,接口(interface)是作为参数传递方法的替代方法,但我不明白接口(interface)如何通过引用充当方法。如果我理解正确,接口(interface)只是一组未定义的抽象方法。我不想发送一个每次都需要定义的接口(interface),因为几个不同的方法可以调用相同的方法,但参数相同。

我想要完成的是类似这样的事情:

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());

最佳答案

编辑:从 Java 8 开始,lambda expressions是一个不错的解决方案,如 other answers已经指出。下面的答案是为 Java 7 及更早版本编写的...


看看command pattern .

// NOTE: code not tested, but I believe this is valid java...
public class CommandExample
{
public interface Command
{
public void execute(Object data);
}

public class PrintCommand implements Command
{
public void execute(Object data)
{
System.out.println(data.toString());
}
}

public static void callCommand(Command command, Object data)
{
command.execute(data);
}

public static void main(String... args)
{
callCommand(new PrintCommand(), "hello world");
}
}

编辑:Pete Kirkham points out , 还有另一种方法可以使用 Visitor .访问者方法涉及更多一些 - 您的节点都需要使用 acceptVisitor() 方法来感知访问者 - 但如果您需要遍历更复杂的对象图,那么值得研究。

关于Java 传递方法作为参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2186931/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com