你能用java中的一个变化变量调用不同的方法吗?

时间:2014-04-30 14:43:34

标签: java android performance refactoring

例如:

public class Game{ 
  String level;

  public void update(){
    update+"level"(); //calls diff. method depending on variable
  }

  public static void setLevel(String lv){
  level = lv;
  }

  private updateLevelOne(){
  .....
  }

  private updateLevelTwo(){
  .....
  }      
}

public class Level{......
      Game.setLevel(One);
}

我知道最重要的声明不会奏效。但我想知道是否有可能以这样的方式进行调用,以至于我不必使用if / switch语句直接转到该方法。

2 个答案:

答案 0 :(得分:2)

使用switch语句或对象:

切换声明:

public class Game {

    private int level;

    public void update() {
        switch(level) {
            case 1:
                updateLevelOne();
                break;
            case 2:
                updateLevelTwo();
                break;
        }
    }

    public static void setLevel(int lv) {
        level = lv;
    }

    private updateLevelOne() {
        .....
    }

    private updateLevelTwo() {
        .....
    }
}

或者,制作关卡对象:

public class Game {

    private Level[] levels;
    private int currentLevel;

    public Game() {
        levels = new Level[2]
        levels[0] = new Level();
        levels[1] = new Level();
        currentLevel = 0;
    }

    public void update() {
        levels[currentLevel].update();
    }

    public static void setLevel(int newLevel) {
        currentLevel = newLevel;
    }
}

public class Level {

    public Level() {

    }

    public void update() {

    }
}

首选对象,但您可以选择任何一种方式。您也可以使用reflection包,但这是一个更难理解的更糟糕的想法。

答案 1 :(得分:1)

不,不可能像这样动态创建方法名称。

你应该查看Strategy pattern。这意味着您将一些Level接口设置为类中的字段。 你所有不同的级别都应该实现这个接口,每个级别都应该实现一些更新方法。在运行时,您可以使用当时所需的确切实现来设置此字段,并且可以在其上调用update()。这将委托给所需的实施。