Вы можете начать с определения интерфейса под названием 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;
}
Вы можете затем просто передайте номер строки этому методу и вызовите метод run
:
QuestRunner questRunner = createQuestRunner(br.readLine());
questRunner.run();
Примечание: Вам больше не нужен чехол для переключения, если вы используете вышеуказанные решения.
Я программирую в java –
Возможно, вы захотите сделать шаг назад и снять некоторые учебные пособия по Java. Если у вас есть экземпляр 'Quest', а' run() 'принимает параметр, это будет' theQuest.run (quest [0]) '. Если это не так, то вам нужно предоставить подробную информацию о методе, который вы пытаетесь запустить. –
@RedBaron Вы можете использовать отражение или воспользоваться полиморфизмом для достижения этого. – CKing