あなたは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();
注:上記のソリューションを使用する場合は、スイッチケースが不要になります。
私はJavaでプログラミングしています –
あなたは一歩前進し、いくつかのJavaチュートリアルをスキップしたいかもしれません。あなたが 'Quest'のインスタンスを持っていて、' run() 'がパラメータを取るなら、' theQuest.run(quest [0]) 'でしょう。そうでない場合は、実行しようとしているメソッドの詳細を提供する必要があります。 –
@RedBaronこれを実現するには、リフレクションを使用するか、多型を利用できます。 – CKing