我的目标是提供一个类来构建一个函数链,以便在之后执行一些任务。这是我目前能想到的
函数类
public class Loop {
private final int from;
private final int to;
private Loop(int from, int to) {
this.from = from;
this.to = to;
}
public static Loop from(int from) {
return new Loop(from, 0);
}
public static Loop to(int to) {
return new Loop(0, to);
}
public void execute(Executable executable) {
for (int i = from; i < to; i++) {
executable.execute();
}
}
}
可执行接口
@FunctionalInterface
public interface Executable {
void execute();
}
它可以用于一个参数(from或to),如
Loop.to(10).execute(() -> {});
但我希望它能适用于多种参数,比如
Loop.from(5).to(10).execute(() -> {});
我怎样才能做到这一点?另外,我不确定static from和static to方法是否适合使用一个冗余参数的循环类。
2条答案
按热度按时间093gszye1#
有几种方法可以采取。解决方案越复杂,通常就越复杂。让我们从一个简单的解决方案开始。
ideone演示
这已经很了不起了。但我们可以打电话
from(...)
或者to(...)
多次。如果我们只允许一个电话from(...)
在此之后,只允许呼叫to(...)
,那么我们需要定义更多的类型。我们可以通过添加接口来实现这一点LoopFromSetBuilder
,LoopToSetBuilder
以及LoopAllSetBuilder
:再加上方法上的小小调整
Loop
```class Loop {
...
public static LoopFromSetBuilder from(int from) {
return new Builder().from(from);
}
}
public static class Builder implements LoopFromSetBuilder, LoopToSetBuilder, LoopAllSetBuilder {
...
}
1aaf6o9v2#
最好有一个
from
和非静态名称相同,但不支持。参数或名称必须不同。因此,我将私有构造函数设为公共的,并添加第二个no args构造函数,以便调用可以变成:
为了工作
from
以及to
必须不再是静态的。然后你必须决定这些方法是否会改变Loop
示例调用它们,或者如果它们返回新对象:或
如果您想更进一步,可以将类重命名为
LoopBuilder
创建一个build()
返回Loop
像以前一样有田地,但没有from
以及to
方法,只是execute
方法:这个电话就会变成