首页 > 解决方案 > 将函数作为参数传递给另一个类中的另一个函数

问题描述

我想将一个函数作为参数传递给另一个类中的另一个函数来执行它并返回它的返回值。以下示例代码显示了我想要做的事情。你能帮助我如何实现这一目标吗?

MyClass myClass = new MyClass();
myClass.myFunction( executeFunction( "name", 123 ) );

public long executeFunction( String a, Integer b ) {
    //do something
    return 321;
}

/* inside MyClass */
public <RetTyp> myFunction( /*accept any function as a parameter with RetTyp as a return data type*/) {
   /*execute method coming in the argument and return its return value*/
}

标签: java

解决方案


您可以定义自己的功能接口或使用BiFunction<T, U, R>

import java.util.*;
import java.util.function.*;

public class MyClass {

    @FunctionalInterface
    static interface MyFunction<R, T1, T2> {
        R apply(T1 arg1, T2 arg2);
    }
    // static
    public static <R, T1, T2> R myFunction(MyFunction<R, T1, T2> function, T1 arg1, T2 arg2) {
        return function.apply(arg1, arg2);
    }

    // instance
    public  <T1, T2, R> R myBiFunction(BiFunction<T1, T2, R> function, T1 arg1, T2 arg2) {
        return function.apply(arg1, arg2);
    }
    public static long executeFunction(String a, Integer b) {
        System.out.println(a + ", b=" + b);
        return 123L * a.length() * b;
    }

    public static void main(String args[]) {
        System.out.println(myFunction(MyClass::executeFunction, "guess", 100));
        
        System.out.println(myFunction((List<String> a, String b) -> a.indexOf(b), Arrays.asList("abc", "def", "xyz"), "opq"));
        System.out.println(new MyClass().myBiFunction(MyClass::executeFunction, "bi", 999));
    }
}

样本输出:

guess, b=100
61500
-1
bi, b=999
245754

推荐阅读