Java Pass方法作为参数

问题:

我正在寻找一种通过引用传递方法的方法。我明白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());

回答:

 Edit:从Java 8起,lambda expressionsother 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");
    }
}

 Edit:Pete Kirkham points out,还有另一种使用Visitor的方法。访问者方法有一点更多的参与 – 您的节点都需要使用acceptVisitor()方法访问者感知,但如果您需要遍历更复杂的对象图,那么值得检查。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java Pass Method as Parameter

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

+ 18 = 24