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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Werke für nicht-statische Felder.
field.set(...)
Funktion ist das Objekt zu ändern, NICHT das Feld