有没有办法将方法作为参数传递给方法?

时间:2016-04-24 01:05:43

标签: java reflection functional-programming

我正在编写一个程序,我想知道我是否可以将方法作为另一个方法的参数传递。例如,以下内容:

public boolean update(Method m){ //input is a method
    int i = m.execute();
    // logic relating to the value of i
}

我想知道我是否可以在java中执行此操作。我现在正在阅读关于函数式编程和Reflection的文章。

2 个答案:

答案 0 :(得分:2)

这与反射无关,但你可以传递"方法参考"如果您使用的是Java 8+。假设从您的示例中打算使用不带参数的方法并返回一个int,您可以这样做:

public class MyClass {
    public int getIntMemberFunction(){ ... }
    public static int getIntStaticFunction(){ ... }
}

将您的更新功能修改为如此,

public boolean update(IntSupplier s){ //input is a method reference or lambda
    int i = s.get();
    // logic relating to the value of i
}

然后你可以调用update传递对任何类的任何静态函数的引用,只要它不接受任何参数并返回一个int,如下所示:

boolean result = update(MyClass::getIntStaticFunction);

或者你可以调用update传递对特定对象的任何成员函数的引用,只要它不带参数并返回一个int,如下所示:

MyClass myClassInstance = ...
boolean result = update(myClassInstance::getIntMemberFunction);

如果要添加带有1个或2个参数的方法,可以创建updateToIntFunction的{​​{1}}版本。超过2个参数,您必须添加自己的功能接口。

答案 1 :(得分:0)

一种方法是使用Interfaces。在Java中,您可以将函数作为参数传递给实现特定接口的对象,从而可以在该对象上调用该方法。 更多现代语言,如Python,Swift,Javascript,可以更好地支持这种习语。