如何在方法调用之间切换?

How can I alternate between method calls?

我想调用两个方法,但我想一次只调用其中一个。

下一次我想调用之前没有调用过的那个,有点像Round Robin技术

示例:

void mainMethod() {
    Obj val;

    if (somthing)
        val = implMethod1();
    else {
        val = implMethod2();
    }
}

使用 if 语句是可以做到的。 但是有没有什么开箱即用的东西我可以用它来达到同样的目的?

不知道我是否理解正确问题:

boolean first = true;
if (somthing && first) {
    val = implMethod1();
    first = false;
} else {
    val = implMethod2();
    first = true;
}

假设somthing是一个boolean变量,可以用这个策略实现:

void mainMethod() {
    Obj val;

    if (somthing) {
        val = implMethod1();
        somthing = false;
    } else {
        val = implMethod2();
        somthing = true;
    }
}
static int count = 0;

void mainMethod() {
    Obj val;

    if (somthing && count % 2 == 0)
        val = implMethod1();
    else {
        val = implMethod2();
    }
    count++;
}

你可以试试上面的代码。

private static boolean check = true;

void mainMethod() {
    Obj val;

    if (check) {
        val = implMethod1();
        check = !check;
    } else {
        val = implMethod2();
        check = !check;
    }
}

这可能对你有帮助。

您可以使用队列:

初始化队列:

import java.util.LinkedList;
import java.util.Queue;

....

Queue<String> methodQueue = new LinkedList<>();
methodQueue.add("implMethod1");

在你的方法中使用队列:

void mainMethod(methodQueue){
 somthing = methodQueue.poll()
 Obj val;

 if(somthing.equals('implMethod1'))
    val = implMethod1();
    methodQueue.add('implMethod2')

 else{
    val = implMethod2();
    methodQueue.add('implMethod1')
 }
}

只需在 class 中声明一个 boolean 变量:

public class MainClass {
    private boolean useMethod1 = true;
    public void mainMethod() {
        if (useMethod1) {
            method1();
        } else {
            method2();
        }
        useMethod1 = !useMethod1;
    }
}

您可以在 static 中执行相同的操作:

  • 如果你不想实例化一个对象
  • 如果你想要线程安全,在 mainMethod()
  • 之前添加 synchronized

您可以使用 AtomicBoolean 来确保线程安全 循环法:

AtomicBoolean roundRobin = new AtomicBoolean(false);

void mainMethod() {
    Object val;
    if (roundRobin.compareAndSet(false, true)) {
        val = implMethod1();
    } else {
        val = implMethod2();
        roundRobin.set(false);
    }
}

A boolean value that may be updated atomically.