gpt4 book ai didi

java - Java的field.setAccessible(true)在什么情况下会失效?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:16:56 26 4
gpt4 key购买 nike

我有这样一种情况,用户的代码在反射访问的字段上抛出 IllegalAccessException。在访问该字段之前,将调用 setAccessible(true)。所以,在我看来,这种方法正在默默地失败。

在什么情况下会发生这种情况?这可能与安全经理有关吗?

这是导致异常的代码片段:

private static Field levelField;
public int getLevel() {
try {
if (levelField == null) {
levelField = MessageInfo.class.getDeclaredField("level");
levelField.setAccessible(true);
}
return levelField.getInt(this); // <-- IllegalAccessException thrown here
} catch (Exception e) {
handleException(e);
}
return ICompilationUnit.NO_AST;
}

最佳答案

这不应该是安全管理器问题 - 您会得到一个 SecurityException 或子类。

代码 levelField.getInt(*this*) 看起来不对……

您应该将 MessageInfo 的实例作为参数传递。

您是从 MessageInfo 类中调用它吗? (为什么?!?)还是 MessageInfo 的子类? (试图使父类(super class)的私有(private)字段表现得好像它受到保护一样?MessageInfo 是否有 getLevel() 方法?如果有,您可以调用 super. getLevel() 获取值而不是尝试这种方式。)

如果它不是 MessageInfo 或子类,那是你的问题 - 你有 MessageInfo 类的 level 字段并且你正在尝试从当前类中获取该字段的值。虽然这应该抛出 IllegalArgumentExeception 而不是 IllegalAccessException...

如果它真的是“IllegalAccessExeception” - 尝试在 if (levelField == null) block 中放置一些日志 - 确保它真的被执行了。该字段是静态的 - 可能有一些其他实例或方法在其上设置值。

关于java - Java的field.setAccessible(true)在什么情况下会失效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1549804/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com