[英]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.