根据输入参数从不同的类中调用方法

时间:2017-01-22 13:09:25

标签: java arrays class variables call

我正在用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" +一个数字。

2 个答案:

答案 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)

我的建议是考虑代码的结构。你要做的是不正确的。您要完成的任务的可选版本是:

  • 您有一个正在尝试构建的游戏实例。
  • 你存储。 你的任务完全在你的Quest&#39;
  • 你有一个方法&#34;运行&#34;在游戏里。 获取您想要的任务的参数ID的实例 运行并执行它。

在该示例中,您可以执行以下操作:

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

这就是如何实现您期望从程序中获得的功能的超级基本概念。