我有这样的方法:
public void runMethod()
{
method1();
method2();
method3();
}
我想根据一个 id 多次调用这个 runMethod。但是,如果说method2()由于某种原因失败,那么当我调用runMethod时,它应该执行method3()而不是再次尝试执行method1()(对于这个id已经成功运行)。
实现这一目标的最佳方法是什么?
非常感谢您的帮助
我有这样的方法:
public void runMethod()
{
method1();
method2();
method3();
}
我想根据一个 id 多次调用这个 runMethod。但是,如果说method2()由于某种原因失败,那么当我调用runMethod时,它应该执行method3()而不是再次尝试执行method1()(对于这个id已经成功运行)。
实现这一目标的最佳方法是什么?
非常感谢您的帮助
您可以在地图中记录方法是否已成功执行。
private Map<String, Boolean> executes = new HashMap<String, Boolean>();
public void method1() {
Boolean hasExecuted = executes.get("method1");
if (hasExecuted != null && hasExecuted) {
return;
}
executes.put("method1", true);
...
}
// and so forth, with method2, method3, etc
您正在寻找某种状态机。将方法执行的状态保存在数据结构(例如映射)中。
在方法的开头,您需要检查给定id的method1执行是否成功。
public void runMethod()
{
method1();
method2()
method3();
}
private Set<Integer> method1Executed = new HashSet<Integer>();
private Set<Integer> method2Executed = new HashSet<Integer>();
private void method1(Integer id)
{
if (method1Executed.contains(id)) {
return;
}
// Processing.
method1Executed.add(id)
}
// Similar code for method2.
我的解决方案是添加一个 int 是一个指示符,而不是引入映射,尤其是在经常调用代码的情况下。它看起来像这样:
public int runMethod(int flag) {
if (flag < 1) {
method1();
if (method1failed) {
return 1;
}
}
if (flag < 2) {
method2();
if (method2failed) {
return 2;
}
}
if (flag < 3) {
method3();
if (method3failed) {
return 3;
}
}
return 4;
}