如何在方法调用之间切换?
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.
我想调用两个方法,但我想一次只调用其中一个。
下一次我想调用之前没有调用过的那个,有点像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.