考虑以下场景,从main方法,基于某些条件,我调用方法func。在func中,我需要调用diff。基于我在func中作为参数传递的任何方法。我们怎么做?
void mainMethod(){
if(...)
func(methodX);
else
func(methodY);
}
void func(... x) <- takes method name as parameter
{
// do something
// call method received in importing parameter x
}
void methodX()
{
// do something
}
void methodY()
{
// do something
}
答案 0 :(得分:2)
没有&#34;纯粹&#34; Java中的函数指针。
在Java 7之前,您必须使用接口:
void mainMethod() {
if(...)
func(new MethodX());
else
func(new MethodY());
}
void func(Runnable x) {
x.run();
}
private class MethodX implements Runnable {
public void run() {
// do something
}
}
private class MethodY implements Runnable {
public void run() {
// do something
}
}
在Java 8中,您可以使用方法引用:
void mainMethod(){
if(...)
func(this::methodX); // or the second line
//func(() -> methodX());
else
func(this::methodY); // or the second line
//func(() -> methodY());
}
void func(Runnable x) {
x.run();
}
public void methodX() {
// do something
}
public void methodY() {
// do something
}
答案 1 :(得分:0)
你每次都在调用这种方法,对吧?
void func(... x)
{
// do something
// call method received in importing parameter x
}
如果我理解你,你可以做以下事情:
void mainMethod()
{
// do something here and called directly method
if(...)
methodX()
else
methodY()
}