如何将函数引用作为需要在Java中调用函数内部调用的参数传递

时间:2015-02-28 11:18:15

标签: java

考虑以下场景,从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
}

2 个答案:

答案 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()
}