我正在用 Java 制作一个文本冒险游戏,并尝试制作一个“任务板”。在那里您可以看到可用的任务,但我不知道应该如何使用变量调用其他类中的方法。我尝试过这样的事情:
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”+数字。
最佳答案
您可以首先定义一个名为 QuestRunner
的接口(interface),并确保所有 Quest
类都实现此接口(interface)和 run
方法:
public interface QuestRunner {
public void run();
}
您现在有 2 个选项可以根据文件中存在的行动态调用方法:
<强>1。反射(reflection)
创建一个根据类的完全限定名称为您创建对象的方法:
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();
注意:如果使用上述解决方案,则不再需要开关盒。
关于java - 根据输入参数调用不同类的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41791275/