Я буду держать его кратким, у меня есть Dog
класс вроде следующего:Отражение - Получение различные результаты HashMap - LinkedHashMap
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()
.
По-видимому, это не облегчает мою проблему с «вызовом метода». Как я могу решить эту проблему? Я должен каждый раз называть правильный метод. Я совершенно новичок в этом размышлении, есть ли что-то, что я не должен делать, или что-то, что я делаю неправильно? Или есть лучший способ реализовать этот метод?
EDIT: Я также пробовал LinkedHashMap
, однако результат тот же.
спасибо.
Это не имеет ничего общего с HashMap. Используйте http://docs.oracle.com/javase/7/docs/api/java/lang/Class.html#getDeclaredMethod%28java.lang.String,%20java.lang.Class...%29, чтобы получить метод вы действительно хотите вместо [0]. –