0

例えば:

3つの方法が存在

"map1メソッド、

map2メソッド、

map3method"

整数「activemap」に現在格納されているものに応じて、正しいものを呼び出したいと思います。

私はIfステートメントを行うことができました

"If (アクティブマップ == 1)

map1メソッド;

elseif (アクティブマップ ==2)

...」

しかし、整数をより効率的に使用する方法はありますか?

「マップ(アクティブマップ)メソッド」のように

また、同じ方法で特定の配列をバッチで呼び出すこともできます。

ちなみに、これはすべてJavaです。

4

4 に答える 4

3

リフレクションを介して可能ですが、そのアプローチを避けることをお勧めします. 3 つの方法をすべて 1 つに組み込んでみませんか? 1 つのオプションは、switchステートメントを使用してさまざまなケースを処理することです。

void mapMethod(int activemap) {
    switch (activemap) {
    case 1:
        // map1method
        break;
    case 2:
        // map2method
        break;
    case 3:
        // map3method
        break;
     default:
        break;
    }
}

今、あなたは呼び出すことができます

mapMethod(activemap)

代わりにリフレクション アプローチを採用したい場合 (私が言ったように、そうすべきではないと思います)、次のように何かを行うことができます。

String methodName = "map" + activemap + "method";
MyClass.class.getDeclaredMethod(methodName).invoke(null);
于 2013-09-15T14:58:14.917 に答える
0

Reflectionを使用してそれを行うことができます。次のようになります。

  java.lang.reflect.Method method;

  method = myObject.getClass().getMethod("map+"activemap"+method", param1.class, param2.class, ..);

  method.invoke(object, arg1, arg2,...);
于 2013-09-15T15:12:21.663 に答える
0

switch ステートメントを使用すると、読みやすくなります。

switch(activemap) {
   case 1:  map1method(); break;
   case 2:  map2method(); break;
}

リフレクションを使用して実行時にメソッド名を作成することもできますが、それは簡単ではありません。リフレクションは大量のコードです。

于 2013-09-15T14:58:36.747 に答える
0

これを行う最も効果的な方法は、 を作成しenumてさまざまな呼び出しを表し、 をint列挙値のルックアップとして使用するか、それが不可能な場合はswitchステートメントを使用することです。リフレクションを使用して、話していることを達成できます (名前に基づいて実行時にメソッドを検索します) が、これらのオプションのいずれよりも効率が悪く、面倒です。

于 2013-09-15T14:59:02.300 に答える