Skip to main content
2 of 3
fixed the code block formatting
Zachary Yates
  • 13.5k
  • 7
  • 60
  • 90

android changing private static final field using java reflection?

I want to set "NO_CACHE" to be newValue. Here is my code:

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); } 

But running this code on Android produces the following error: java.lang.NoSuchFieldException: modifiers

I find "modifiers" is a field in the Field class on JAVA, but it is not a field in the Field class on Android.

This is JAVA Field class code:

http://www.docjar.com/html/api/java/lang/reflect/Field.java.html

This is Android Field class code:

http://www.oschina.net/code/explore/android-2.2-froyo/java/lang/reflect/Field.java

The above code in JAVA can work, but it does not work on the Android platform.

How do I fix this?