小编Sas*_*sha的帖子

Java - 在这种情况下如何正确规避非法访问异常

我遇到了这个奇怪的问题,即使(我认为)我将所有内容设置为可以正确访问,但我仍然收到 IllegalAccessException。

java.lang.IllegalAccessException:类 com.sasha.eventsys.SimpleEventManager 无法使用修饰符“private”访问类 com.sasha.proxy.discord.DiscordMain 的成员

public void invokeEvent(SimpleEvent e){
    registeredMethods.forEach(method -> {
        if (method.getParameterTypes()[0] == e.getClass()){
            try {
                Class clasz = method.getDeclaringClass();
                for (Field field : clasz.getFields()) {
                    field.setAccessible(true);
                }
                for (Method meth : clasz.getMethods()) {
                    meth.setAccessible(true);
                }
                for (Constructor<?> constructor : clasz.getConstructors()) {
                    constructor.setAccessible(true);
                }
                method.setAccessible(true);
                method.invoke(clasz.newInstance(), e);
            }
            catch (Exception ex){
                System.out.println("FATAL EXCEPTION DURING " + e.getClass().getName() + "'s EXECUTION");
                ex.printStackTrace();
            }
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

这是调用该方法的代码。理论上,那些 for 循环应该将所有内容设置为可访问,对吧?

@SimpleEventHandler
public void onMcMsgRecieved(MinecraftMessageRecievedEvent e){
    if(Config.doDiscord) {
        DiscordMain.theChannel …
Run Code Online (Sandbox Code Playgroud)

java reflection

3
推荐指数
1
解决办法
2412
查看次数

标签 统计

java ×1

reflection ×1