假设我有一个包含3个其他方法的调用的方法。如何设置内部方法的调用顺序取决于参数?例如,
public void method(int i){
if(i == 0){
anotherMethod1();
anotherMethod2();
anotherMethod3();
} else if(i == 1){
anotherMethod2();
anotherMethod1();
anotherMethod3();
} else if(i == 2){
anotherMethod3();
anotherMethod2();
anotherMethod1();
}
//ETC
有没有办法在没有多个if-else
条款的情况下执行此操作?
答案 0 :(得分:1)
你已经说过你正在使用Java 5(!),所以Java 8的lambda已经出局了。
你几乎有三个选择:
if/else if/else if
,如您的示例所示。
switch
,类似。
接口引用数组的Map
(或数组),您可以通过调用每个方法来实现接口。外部Map
/数组是您使用参数索引的内容,它包含的数组是按照您要调用它们的顺序调用的方法。例如,一个调度图,它以正确的顺序为您提供方法列表,包含在一个界面中,以便存储对它们的引用。
#3,但改为使用反射,因此内部数组是Method
的数组。
#3和#4几乎肯定是方式超过顶部。
答案 1 :(得分:1)
假设您只想为3种方法执行此操作,您可以执行以下操作:
int[][] orderOfExecution = {{1,2,3},{1,3,2},{2,1,3},{2,3,1},{3,2,1},{3,1,2}};
void executeMethod(int x){
switch(x){
case 1: anotherMethod1(); break;
case 2: anotherMethod2(); break;
case 3: anotherMethod3(); break;
}
}
并且您的method()
方法看起来像这样:
void method(int x){
for(int i : orderOfExecution[x])
executeMethod(i);
}
现在,如果您想要为更多方法执行此操作,这将不会那么好但是如果您想要这样做,您可以创建一个方法,返回大小为n
的数组的所有可能排列n
是您希望以这种方式执行的方法的数量。
希望这有帮助。