HashMaps
キーを値にマップするための使用方法やものを知っています。キーをメソッドにもマップできるかどうか疑問に思っていました。
たとえば、プログラムはユーザーに入力を求めます。次に、入力された名前を持つメソッドを呼び出します。つまり、入力が の場合"cat"
、メソッドcat()
が呼び出されます。
もちろん if 文を使うこともできますが、もっと簡単な方法はありますか?
HashMaps
キーを値にマップするための使用方法やものを知っています。キーをメソッドにもマップできるかどうか疑問に思っていました。
たとえば、プログラムはユーザーに入力を求めます。次に、入力された名前を持つメソッドを呼び出します。つまり、入力が の場合"cat"
、メソッドcat()
が呼び出されます。
もちろん if 文を使うこともできますが、もっと簡単な方法はありますか?
メソッドを取得して呼び出します。
java.lang.reflect.Method method = class_obj.getClass().getMethod("functionName"); // add params if any
method.invoke(); // add params if any
これは、関数を呼び出すことと同等です。
functionName(void);
これは、パラメータを渡す必要がない場合です。
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
で、呼び出すことができるメソッドにメソッドの名前が付けられましたが、Method
API を使用してそれらを呼び出す必要があります。
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()");
}
}
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()
が呼び出されます。