Change private static final field using Java reflectionAndroid: cambiar definitiva campo utilizando Java reflexión estática privada
He seguido las instrucciones en el enlace anterior para cambiar un campo private static final utilizando Java reflexión. Tengo un objeto llamado "datos". Dentro de "datos", hay una variable final privada estática llamada "tipo". Quiero configurar "tipo" para que sea nulo. Aquí está mi código.
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);
He intentado hacer esto en Java 1.7 con un código similar y funcionó. Sin embargo, la ejecución de este código en Android produce el siguiente error: java.lang.NoSuchFieldException: modificadores
supongo "modificadores" no es un campo en la clase Field en Android.
¿Cómo puedo solucionar esto?
Usted ... no puede cambiar los _modifiers en una clase field_ en _runtime._ –
puedo según ese enlace. – jas7
Recuerde que el compilador de Java puede alinear los valores de los campos finales estáticos primitivos. Hacer este tipo de magia de reflexión podría conducir a un comportamiento extraño. – millimoose