假设我有一个类的方法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的签名)。
答案 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);
}
}