是否有可能创建一个方法来传递一个方法作为参数,并在其中调用



嗯,我想知道是否有可能有一个方法,其中另一个方法作为参数传递,所以第一个方法可以调用在param传递的方法?

例如:

public void goToVisitManagementForm() throws ParseException {
    if (isAuthenticated() && userTypeIs("Patient")) {
         // I could have this whole block just moved to another method?
        Panel newPanel = new Panel("Choose the details for your visit");
        Component visitManagementForm = new VisitManagementForm(userData,
                this);
        newPanel.addComponent(visitManagementForm);
        mainWindow.setMainPanel(newPanel);
    } else {
        authenticate();
    }
}

如果代码块将被移动到另一个方法,它将作为参数传递给该方法。我怎样才能做到这一点,这是一个好的做法吗?因为在这种情况下,我总是需要粘贴。其他方面呢?

这被称为高阶函数,在Java 7或以下版本中不能这样做。您可以通过使用匿名类来模拟将函数传递给其他函数,该类实例化函数期望的某个接口,然后在该对象上调用该函数。

例如,传递一个无参数的函数:

interface Function {
    void apply();
}
void takesAFunction(Function function) {
    function.apply();
}

那么下面的代码片段可以满足您的要求:

Function myFunction = new Function() {
    @Override
    public void apply() {
        // your code here.
    }
};
takesAFunction(myFunction);

作为旁注,对于这种类型的问题,反射是极端多余的。

您可以使用Java Reflection API将方法作为参数传递。

首先,从类中获得一个方法对象:

 Class c = MyClass.class;
 Method[] methods = c.getMethods();
 Method m = // choose the method you want

那么你的函数可以接受一个Method对象作为参数:

 public void aFunction(MyClass o, Method m);

然后在这个函数中你可以调用方法:

 m.invoke(o);

这是一个非常简单的例子,其中方法不接受任何参数。在这个例子上扩展并添加参数也很容易。

是的,但这是一个非常高级的程序。您需要使用Method对象。下面是javadoc on Method:

这里是javadoc:
——http://docs.oracle.com/javase/6/docs/api/java/lang/reflect/Method.html

如果我正确理解你的问题,你希望能够传递一个方法作为参数。在Java中确实没有"流畅"的方法来做到这一点。在objective C中,它被内置到语言中,(@selector tag)

最新更新