- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有这样一种情况,用户的代码在反射访问的字段上抛出 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/
我想在一个类中拥有一个私有(private)属性,并且能够通过 ReflectionClass 将其设置为另一个。 我知道如果我创建类属性的 ReflectionProperties,我可以将它们设置
我有这样一种情况,用户的代码在反射访问的字段上抛出 IllegalAccessException。在访问该字段之前,将调用 setAccessible(true)。所以,在我看来,这种方法正在默默地失
根据 Java 内存模型,一个 final在对象的构造函数中初始化的字段不受进一步修改的影响,保证每个读取它的线程都能正确看到它的值,即使对象本身已经发布了数据竞争。 JLS 谈论17.5.3 Sub
我正在使用一些注释来动态设置类中字段的值。因为无论它是公共(public)的、 protected 还是私有(private)的,我都想这样做,所以每次在调用 set() 之前,我都是在 Field
我越了解java.lang.reflect.AccessibleObject.setAccessible的力量,我越是惊讶于它的能力。这改编自我对问题( Using reflection to cha
field.setAccessible(false) 对非私有(private)字段有什么影响? 我预计该成员的访问会被拒绝,但事实并非如此! 我试图深入研究源代码,但在某些时候( Field#get
我是 Reflection 的新手,我有这样的疑问: public void setAccessible(boolean flag) throws SecurityException 此方法有一个bo
本文整理了Java中org.hibernate.cfg.annotations.reflection.XMLContext.setAccess()方法的一些代码示例,展示了XMLContext.set
当我使用gradle run运行我的Ktor应用程序时,出现以下异常: 19:21:11.795 [main] DEBUG io.netty.util.internal.logging.Interna
我知道 publicLookup() 比公共(public)方法的 lookup() 更快,我想利用它。如果我要在 Method 上使用 MethodHandles.publicLookup().un
看看setAccessible - Java 中一种让您通过反射调用私有(private)方法的方法。为什么 .NET 还没有实现这样的功能? 最佳答案 Here是在 .NET 中执行此操作的示例 u
我有一个像上面一样的 junit 测试,但是当我启动测试时,我收到这个错误(JDK 13.0.1): java.lang.UnsupportedOperationException: Reflecti
我是一名优秀的程序员,十分优秀!