0

HashMapsキーを値にマップするための使用方法やものを知っています。キーをメソッドにもマップできるかどうか疑問に思っていました。

たとえば、プログラムはユーザーに入力を求めます。次に、入力された名前を持つメソッドを呼び出します。つまり、入力が の場合"cat"、メソッドcat()が呼び出されます。

もちろん if 文を使うこともできますが、もっと簡単な方法はありますか?

4

6 に答える 6

2

メソッドを取得して呼び出します。

java.lang.reflect.Method method = class_obj.getClass().getMethod("functionName"); // add params if any
method.invoke(); // add params if any

これは、関数を呼び出すことと同等です。

functionName(void);

これは、パラメータを渡す必要がない場合です。

于 2013-11-02T06:23:57.603 に答える
1

Mapほとんど何でも何でも作成できます。ただし、あなたのシナリオは確かに非正統的なアプリケーションです。

しかし、あなたが主張するなら、これを行うことができます:

Map<String, Method> map = new HashMap<>(); //Java 7
Method[] methods = ClassToMap.class.getDeclaredMethods() //First link 
for(Method m : methods) {
  map.put(m.getName(), m);  //Second link
}

こちらとこちらをご覧ください

これMapで、呼び出すことができるメソッドにメソッドの名前が付けられましたが、MethodAPI を使用してそれらを呼び出す必要があります。

于 2013-11-02T06:26:35.157 に答える
1
public class Test {
  public static void main(String[] args) throws Exception {
    String name = args[0];
    Method method = Test.class.getDeclaredMethod(name, new Class[]{});
    method.invoke(null, new Object[]{});
  }

  public static void method1() {
    System.out.println("in method1()");
  }

  public static void method2() {
    System.out.println("in method2()");
  }
}
于 2013-11-02T06:35:39.210 に答える
-1

string to を実行できますMethod

たとえば、あなたの場合、次のようなことができます:

String k = "cat"

String caller(String key)
{
    String ret = null;
    if (key.equals(k)) 
    {
    ret = cat();
    }
    return ret;
}

String cat() {}

したがって、ユーザーの入力を関数に渡すたびにcaller()、メソッドcat()が呼び出されます。

于 2013-11-02T06:19:29.453 に答える