繁体   English   中英

如何在方法调用之间交替?

[英]How can I alternate between method calls?

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

下一次我想调用以前没有调用过的那个,有点像循环技术

例子:

void mainMethod() {
    Obj val;

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

使用 if 语句是可以做到的。 但是,我可以使用任何开箱即用的东西来实现相同的目标吗?

您可以使用AtomicBoolean实现线程安全Round Robin

AtomicBoolean roundRobin = new AtomicBoolean(false);

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

可以自动更新的布尔值。

只需在您的类中声明一个boolean变量:

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

你可以在static做同样的事情:

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

不知道我理解的对不对:

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

void mainMethod() {
    Obj val;

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

你可以试试上面的代码。

假设somthing是一个boolean变量,您可以使用以下策略来实现它:

void mainMethod() {
    Obj val;

    if (somthing) {
        val = implMethod1();
        somthing = false;
    } else {
        val = implMethod2();
        somthing = true;
    }
}
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')
 }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM