Android:使用java反射更改私有静态最终字段

时间:2012-06-25 07:58:25

标签: java android reflection

Change private static final field using Java reflection

我按照上面链接中的说明使用java反射更改了私有静态final字段。我有一个名为“数据”的对象。在“数据”里面,有一个名为“type”的私有静态最终变量。我想将“type”设置为null。 这是我的代码。

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

我尝试使用类似的代码在Java 1.7上执行此操作并且它有效。但是在Android上运行此代码会产生以下错误: java.lang.NoSuchFieldException:modifiers

我猜“修饰符”不是Android上Field类中的字段。

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:10)

这适用于非静态字段。

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