19 Stimmen

Android: Ändern eines privaten statischen Endfeldes mit Hilfe von Java Reflection

Privates statisches Endfeld mit Java-Reflexion ändern

Ich habe die Anweisungen im obigen Link befolgt, um ein privates statisches Endfeld mithilfe von Java Reflection zu ändern. Ich habe ein Objekt namens "data". Innerhalb von "data" gibt es eine private statische finale Variable namens "type". Ich möchte "type" auf null setzen. 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, dies auf Java 1.7 mit ähnlichem Code zu tun, und es hat funktioniert. Aber die Ausführung dieses Codes auf Android erzeugt den folgenden Fehler: java.lang.NoSuchFieldException: Modifikatoren

Ich vermute, dass "Modifikatoren" unter Android kein Feld in der Klasse Field ist.

Wie kann ich das beheben?

11voto

jas7 Punkte 2653

Dies funktioniert für nicht-statische Felder.

Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
field.set(data, null);

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X