gpt4 book ai didi

具有可变参数的 Java 方法,可执行操作并打印已知结果

转载 作者:行者123 更新时间:2023-12-04 22:00:54 25 4
gpt4 key购买 nike

是否可以在 Java 中创建类似于此execute 方法的方法:

public void execute(Runnable... mrs) {
for (Runnable mr : mrs) {
mr.run();
// should print some expected string here
}
}

public void sleep(int seconds) {
try {
Thread.sleep(1000 * seconds);
} catch (InterruptedException ex) {
log.error("Error occured", ex);
}
}

public void customExecute() {
execute(() -> sleep(1), () -> sleep(2));
}

但在执行每个操作后,它应该打印传递的 String 参数并且(问题的关键时刻)它应该支持一行用法 - 类似于:

execute(("Action 1 passed") -> someAction(), ("Other action passed") -> otherAction());

最佳答案

您可以使用构建器模式的变体来做到这一点:

public interface Step {
void doIt(String msg, Runnable r);
default Step then(String msg, Runnable r) {
doIt(msg, r);
return this;
}
}
public static Step execute(String msg, Runnable r) {
Step s=(m,x)-> {
x.run();
System.out.println(msg);
};
return s.then(msg, r);
}

然后你就可以像这样使用了

execute("Action 1 passed", () -> someAction())
.then("Other action passed", () -> otherAction());

随意扩展

execute("Action 1 passed", () -> someAction())
.then("Other action passed", () -> otherAction())
.then("NextAction passed", () -> nextAction())
.then("and nextAction passed again", () -> nextAction()) ;

它也很容易适应其他执行策略,例如

static ExecutorService es=Executors.newSingleThreadExecutor();
public static Step executeInBackground(String msg, Runnable r) {
Step s=(m,x)-> es.execute(()-> execute(m, x));
return s.then(msg, r);
}

可在调用者处进行微小更改:

executeInBackground("Action 1 passed", () -> someAction())
.then("Other action passed", () -> otherAction())
.then("NextAction passed", () -> nextAction())
.then("and nextAction passed again", () -> nextAction());

关于具有可变参数的 Java 方法,可执行操作并打印已知结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30030378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com