您可以通過定義稱爲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();
注意:如果您使用上述解決方案,則不再需要開關盒。
我正在使用java編程 –
您可能需要退後一步並略讀一些Java教程。如果你有一個'Quest'的實例,並且'run()'帶有一個參數,那麼它就是'theQuest.run'(quest [0])'。如果沒有,那麼你需要提供你正在運行的方法的細節。 –
@RedBaron你可以使用反射或利用多態性來實現這一點。 – CKing