我正在用Java制作文字冒险,我试图制作一个" Mission board"。在那里你可以看到可用的任务,但我不知道如何用变量调用其他类中的方法。我试过这样的事情:
int quest[] = new int[20];
int i = 0; // running variable
if (quest1Done == false) {
quest[i] = 1;
}
switch (br.readLine()) {
case "1": Quest+quest[0]+.run(); //this should run the method run() in the class Quest + variable (in that case 1)
}
所有的类名都被称为" Quest" +一个数字。
答案 0 :(得分:1)
您可以先定义一个名为QuestRunner
的接口,并确保所有Quest
类都实现此接口和run
方法:
public interface QuestRunner {
public void run();
}
您现在有2个选项可根据文件中的行动态调用方法:
<强> 1。反射强>
创建一个方法,根据类的完全限定名称为您创建对象:
public void runQuest(String className) {
try {
Class classDefinition = Class.forName(className);
Object obj = classDefinition.newInstance();
if(obj instanceof QuestRunner) { ((QuestRunner)obj).run();
} catch (InstantiationException e) {
System.out.println(e);
} catch (IllegalAccessException e) {
System.out.println(e);
} catch (ClassNotFoundException e) {
System.out.println(e);
}
}
<强> 2。运行时多态性
您可以使用一个方法返回一个适当的QuestRunner
实现,给定行号:
public static QuestRunner createQuestRunner(String lineNum) {
QuestRunner questRunner = null;
if(lineNumber.equals("1")) { questRunner = new Quest1() }
else if(lineNumber.equals("2")) { ..... }
return questRunner;
}
然后,您只需将lineNumber传递给此方法并调用run
方法:
QuestRunner questRunner = createQuestRunner(br.readLine());
questRunner.run();
注意:如果您使用上述解决方案,则不再需要切换案例。
答案 1 :(得分:0)
我的建议是考虑代码的结构。你要做的是不正确的。您要完成的任务的可选版本是:
在该示例中,您可以执行以下操作:
Game mGame = new Game(Quest a, Quest b, Quest c); // In the game constructor you add these quests to your ArrayList
mGame.run(1); // runs quest with id = 1
这就是如何实现您期望从程序中获得的功能的超级基本概念。