我想将“NO_CACHE”设置为新值。这是我的代码:
static void setFinalStatic(Object newValue) throws Exception
{
Field field = CacheManager.class.getDeclaredField("NO_CACHE");
field.setAccessible(true);
Field modifiersField=Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field,field.getModifiers() & ~Modifier.FINAL);
field.set(null, newValue);
}
但在 Android 上运行此代码会产生以下错误:
java.lang.NoSuchFieldException: modifiers
我发现 modifiers
是 Java 中 Field
类中的一个字段,但它不是 Android 中 Field
类中的一个字段。
这是 Java Field
类代码:
http://www.docjar.com/html/api/java/lang/reflect/Field.java.html
这是 Android Field
类代码:
http://www.oschina.net/code/explore/android-2.2-froyo/java/lang/reflect/Field.java
以上代码在Java中可以运行,但在Android平台上运行不正常。
我该如何解决这个问题?
最佳答案
我已经尝试了上面的解决方案并获得了在 Android 中修改静态和最终字段的正确方法,这里是适用于 Android 7.0 的代码
Field booleanField = Boolean.class.getField("FALSE");
booleanField.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("accessFlags");
modifiersField.setAccessible(true);
modifiersField.setInt(field,field.getModifiers() & ~Modifier.FINAL);
booleanField.set(null, true);
关于Android 使用 Java 反射更改私有(private)静态最终字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13755117/