7

重複の可能性:
メソッド名が文字列として指定された場合、Java メソッドを呼び出すにはどうすればよいですか?
Java クラスをプログラムでコンパイルしてインスタンス化するにはどうすればよいですか?

私は機能を持っています:

fun1() {
  System.out.print("hello");
}

ユーザーまたはファイルから文字列を読み取りたいのですが、文字列"fun1()"が表示されたら、fun1 を呼び出します。

関数がたくさんあるので、これを switch ステートメントで実行したくありません。

文字列を使用して関数を呼び出す方法はありますか?

4

3 に答える 3

5

ここでリフレクションを使用できます。

Method method = MyClass.class.getDeclaredMethod("fun1", new Class[] {});
method.invoke(this, null);

ただし、最初に検討してください。ただし、リフレクションの使用を避けることができる場合は、リフレクションを使用してください。リフレクションには、デバッグが困難である、Eclipse のような自動リファクタリング ツールが実質的に役に立たないなど、多くの欠点があります。

デザインを再考してください。クラスのよりクリーンな分解、より良いポリモーフィズムなどにより、問題をより適切に解決できる可能性があります。

于 2012-12-22T21:20:03.637 に答える