당신은 QuestRunner
라는 인터페이스를 정의하여 시작하고 모든 Quest
클래스가이 인터페이스와 run
방법을 구현해야합니다 수 있습니다 : 이제 선 존재에 따라 동적으로 메소드를 호출하는 2 가지 옵션이 있습니다
public interface QuestRunner {
public void run();
}
을 파일에 :
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();
참고 : 위의 솔루션을 사용하는 경우 더 이상 스위치 케이스가 필요하지 않습니다.
자바로 프로그래밍 해요 –
뒤로 물러나서 자바 튜토리얼을 훑어보기 바란다. 만약 당신이'Quest'의 인스턴스를 가지고 있고'run()'이 매개 변수를 취하면'theQuest.run (quest [0]) '이 될 것입니다. 그렇지 않으면 실행하려는 메소드에 대한 세부 사항을 제공해야합니다. –
@RedBaron 이것을 달성하기 위해 반사를 사용하거나 다형성을 이용할 수 있습니다. – CKing