1

paramsの入力に基づいて、さまざまなメソッドを呼び出す必要のあるアプリケーションを入手しました。これまでの私の考えは、基本的に、スイッチを作成し、ケースごとにメソッドを個別に呼び出すことです。例:

switch (methodName)
{
    case "method1":
        method1();
        break;
    case "method2":
        method2();
        break;
    default:
        System.out.println(methodName + " is not a valid method!");
}

この質問で提供されているように、指定された文字列でメソッドを呼び出すオプションを検討していました。

メソッド名を文字列として指定した場合、Javaメソッドを呼び出すにはどうすればよいですか?

しかし、それから私は答えの1つから、それは安全ではないことを読みました。皆さんはどう思いますか?

4

2 に答える 2

1

文字列からメソッド呼び出しに移行する必要がある場合は、リフレクションが最適なオプションです。特に、呼び出すことが許可されているメソッドのセットを制限する場合は、安全上の大きな問題はありません。aを使用Map<String, Method>することは、それを実現する1つの方法であり、主なボトルネックはリフレクティブメソッドの呼び出しではなく、メソッドのルックアップであるため、パフォーマンスが向上するという利点があります。

リフレクションなしで、メソッド呼び出しごとに匿名クラスインスタンスを使用してMap<String, Callable>実装するでこれを実現できます。Callableかなり多くの定型コードですが、「タイプセーフ」です。

于 2012-11-15T14:03:32.840 に答える
0

コマンドデザインパターンを使用すると、リフレクションと同じ機能を実現できます。アクションをオブジェクトにラップするため、共通のインターフェースを使用してオブジェクトを検索および呼び出すことができます。

詳細はこちら: http: //en.wikipedia.org/wiki/Command_pattern

于 2012-11-15T14:10:12.783 に答える