我正在编写一个程序,我想知道我是否可以将方法作为另一个方法的参数传递。例如,以下内容:
public boolean update(Method m){ //input is a method
int i = m.execute();
// logic relating to the value of i
}
我想知道我是否可以在java中执行此操作。我现在正在阅读关于函数式编程和Reflection的文章。
答案 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个参数的方法,可以创建update
或ToIntFunction
的{{1}}版本。超过2个参数,您必须添加自己的功能接口。
答案 1 :(得分:0)
一种方法是使用Interfaces。在Java中,您可以将函数作为参数传递给实现特定接口的对象,从而可以在该对象上调用该方法。 更多现代语言,如Python,Swift,Javascript,可以更好地支持这种习语。