如何从Java参数中调用不同的方法?

时间:2018-08-01 23:38:28

标签: java function lambda functional-programming

假设我有一个类的方法A和B:

List<String> A(int start, int size);
List<String> B(int start, int size);

现在,我还有另一个可能使用A或B的函数。但是在调用它们之前,我将先做一些逻辑:

void C() {
 // lots of logic here
 invoke A or B
 // lots of logic here 
}

我想将方法​​A或B作为C的参数传递,例如:

void C(Function<> function) {
 // lots of logic here
 invoke function (A or B)
 // lots of logic here 
}

但是,我注意到Java中的Function类只能接受一个参数(方法A或B都有两个参数)。有没有解决方法? (我不想更改方法A或B的签名)。

2 个答案:

答案 0 :(得分:4)

BiFunction代表一个函数,该函数接受两个参数并产生一个结果,因此您可能需要研究该here

答案 1 :(得分:0)

您可以通过lambda表达式使用和编写自己的功能接口。我在这里说明,

interface MyInterface<T> {
    List<T> f(int start, int size);
}

class Example {
    List<String> A(int start, int size) {
        return new ArrayList<String>();
    }

    List<Integer> B(int start, int size) {
        return new ArrayList<Integer>();
    }

    void C(MyInterface function) {

    }

    public static void main(String[] args) {
        Example e = new Example();
        MyInterface<String> methodForA = (x,y) -> e.A(1,2);
        MyInterface<Integer> methodForB = (x,y) -> e.B(1,2);

        e.C(methodForA);
        e.C(methodForB);
    }
}