我有两段类似的代码:
void task1() {
init();
while(someCondition) {
doSomething();
}
shutdown();
}
Run Code Online (Sandbox Code Playgroud)
void task2() {
while(someCondition) {
init();
doSomething();
shutdown();
}
}
Run Code Online (Sandbox Code Playgroud)
我想避免代码重复,我认为这可以通过使用函数式方法来完成。我想将循环和 init/shutdown 调用放在单独的函数中,然后链接它们的调用(不是 Java 8 Function 接口,更多的伪代码):
Function setup(Function f){
init();
f();
shutdown();
}
Run Code Online (Sandbox Code Playgroud)
Function loop(Function f){
while(someCondition) {
f();
}
}
Run Code Online (Sandbox Code Playgroud)
然后我想像这样链接这些:
void task1() {
setup(loop(doSomething));
}
Run Code Online (Sandbox Code Playgroud)
void task2() {
loop(setup(doSomething));
}
Run Code Online (Sandbox Code Playgroud)
我想到了 Java 的 Function 接口中的 compose/andThen 但它们不合适,因为它们只将一个函数的返回值传递给下一个函数。有没有人知道如何使用 Java 8 或不同的方法来做到这一点?