java - 根据输入参数调用不同类的方法

标签 java arrays class variables call

我正在用 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/

相关文章:

javascript - 需要更深入地了解 json,但在 ajax 服务器响应时我无法做到这一点

c++ - 在类的最大实例化上引发错误

java - API < 23 的 Android PermissionsDispatcher

java - 下载 jre v8 后 Apache Tomcat 不工作

c# - 对于没有函数但用于存储数据的类,正确的行话是什么

java - criteria api 如何向列添加引号?

arrays - 在 UICollectionViewCell 中创建多个 UIImageView

php - 将数组添加到 php 变量

java - 获取用户输入并存储到文件中的数组

c# - 如何将对象从一个方法初始化为类中的另一个方法?