【发布时间】:2015-06-12 14:40:33
【问题描述】:
我会保持简短,我有一个 Dog 类,如下所示:
public class Dog
{
public void Foo()
{
System.out.println("Right Call");
}
public void Boo()
{
System.out.println("Wrong Call");
}
}
还有一个主要方法如下:
HashMap<String, Method> map = new HashMap<String, Method>();
Dog d = new Dog();
Method[] method = d.getClass().getMethods();
map.put("foo", method[0]);
Method a = map.get("foo");
try {
a.invoke(d, null);
} catch (IllegalAccessException | IllegalArgumentException
| InvocationTargetException e) {
e.printStackTrace();
}
每当我再次运行它时,它只是任意给出Right Call 或Wrong Call 输出。
我需要确保每次放置"foo" 键时,它必须调用Foo() 方法,而不是Boo()。
显然,它并不能缓解我的“方法调用”问题。我该如何克服这个问题?我必须每次都调用正确的方法。我对这些反射的东西很陌生,有什么我不应该做的,或者我做错了什么?或者有没有更好的方法来实现这个方法调用?
编辑:我也试过LinkedHashMap,但是结果是一样的。
谢谢。
【问题讨论】:
-
这实际上与 HashMap 没有任何关系。使用docs.oracle.com/javase/7/docs/api/java/lang/… 来获取你真正想要的方法,而不是[0]。
标签: java methods reflection hashmap linkedhashmap