Android: Wechsel private static final-Feld mit Hilfe der java reflection

Ändern private static final-Feld mit Hilfe der Java reflection

Folgte ich den Anweisungen in dem link oben zu ändern private static final-Feld mit Hilfe der java reflection. Ich habe ein Objekt mit dem Namen "Daten". Innerhalb von "Daten", dort ist ein private static final-variable mit dem Namen "Typ". Ich möchte set "type", null sein.
Hier ist mein code.

Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
Field modifiersField = Field.class.getDeclaredField("modifiers");
modifiersField.setAccessible(true);
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
field.set(data, null);

Ich habe versucht zu tun, auf Java 1.7 mit ähnlichem code und es funktionierte. Aber dieser code ausgeführt auf Android produziert den folgenden Fehler:
java.lang.NoSuchFieldException: Modifikatoren

Denke ich "Modifikatoren" ist kein Feld in das Feld Klasse auf "Android".

Wie kann ich dieses Problem beheben?

  • Sie...können es nicht ändern, die Modifizierer für eine Klasse-Feld zur Laufzeit.
  • Ich kann nach diesem link.
  • Denken Sie daran, dass der Java-compiler kann inline-Werte von primitive static final Felder. Tun diese Art der Reflexion Magie konnte führen zu bizarren Verhalten.
InformationsquelleAutor jas7 | 2012-06-25
Schreibe einen Kommentar