方法调用顺序

时间:2014-09-11 10:30:36

标签: java methods

假设我有一个包含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条款的情况下执行此操作?

2 个答案:

答案 0 :(得分:1)

你已经说过你正在使用Java 5(!),所以Java 8的lambda已经出局了。

你几乎有三个选择:

  1. if/else if/else if,如您的示例所示。

  2. switch,类似。

  3. 接口引用数组的Map(或数组),您可以通过调用每个方法来实现接口。外部Map /数组是您使用参数索引的内容,它包含的数组是按照您要调用它们的顺序调用的方法。例如,一个调度图,它以正确的顺序为您提供方法列表,包含在一个界面中,以便存储对它们的引用。

  4. #3,但改为使用反射,因此内部数组是Method的数组。

  5. #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是您希望以这种方式执行的方法的数量。

希望这有帮助。