【发布时间】:2020-01-07 13:07:06
【问题描述】:
我有两段相似的代码:
void task1() {
init();
while(someCondition) {
doSomething();
}
shutdown();
}
void task2() {
while(someCondition) {
init();
doSomething();
shutdown();
}
}
我想避免代码重复,我认为这可以通过使用函数式方法来完成。 我想将循环和 init/shutdown 调用放在单独的函数中,然后链接它们的调用(不是 Java 8 Function 接口,更多伪代码):
Function setup(Function f){
init();
f();
shutdown();
}
Function loop(Function f){
while(someCondition) {
f();
}
}
然后我想像这样链接这些:
void task1() {
setup(loop(doSomething));
}
void task2() {
loop(setup(doSomething));
}
我想到了 Java 的 Function 接口中的 compose/andThen,但它们不适合,因为它们只将一个函数的返回值交给下一个函数。有谁知道如何使用 Java 8 或其他方法来做到这一点?
【问题讨论】:
-
为什么初始代码会困扰您?如果
init、doSomething和shutdown是实际方法,则没有重复。 -
你想多了。初始代码没有问题。
-
我稍微缩短了代码,其中有一些重复。然而它并没有真正困扰我,我只是想提高我的 Java 技能。我认为可能有更好的方法来做到这一点,如果没有我对初始代码没问题。
-
重复的代码块 -> 创建一个方法。 (不要把它当作信条,但你应该明白这一点)
-
完全同意,我只是好奇这种方法是否适用于 Java
标签: java java-8 functional-programming