Я пытаюсь использовать Reflection в Java, но получаю странную ошибку.Каковы возможные проблемы, когда я получаю сообщение об ошибке:
java.lang.IllegalAccessException: Class com.myapp.core.utils.EventDispatcher can not access a member of class appApp$1 with modifiers "public"
at sun.reflect.Reflection.ensureMemberAccess(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
Я просто пытаюсь создать свой собственный класс EventDispatcher и внутри него, часть, которую я использовал отражение, которая также является строкой кода, котораяпричина проблемы:
public void dispatchEvent(Event e, String callMethName) {
IEventListener list = ((IEventListener)listeners[i]);
list.getClass().getMethod(callMethName, Event.class).invoke(list, e);
}
В моем основном классе у меня есть то, что вызывает addListener, который просто добавит слушателя в список в классе EventDispatcher следующим образом:
try {
obj.addListener("onTestHandler", new MyTestEventListener(){
@Override
public void onTestHandler(Event e) {
System.out.println("hello!");
}
});
} catch (SecurityException e) {
e.printStackTrace();
}
Таким образом, первый параметр, который говорит «onTestHandler», будет передаваться в класс EventDispatcher и в конечном итоге как часть параметра callMethName в методе dispatchEvent, который будет вызывать метод динамически.
Передача методов и все правильно.У той части, которая имеет отражение, есть проблемы.Кажется, можно найти метод.Но по какой-то причине выдает исключение IllegalAccessException и не может вызвать метод.
Почему это так?
Спасибо.