例如:
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语句直接转到该方法。
答案 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()。这将委托给所需的实施。