19

使用 Java 反射更改私有静态最终字段

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

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 类中的一个字段。

我该如何解决?

4

1 回答 1

10

这适用于非静态字段。

Field field = data.getClass().getDeclaredField("type");
field.setAccessible(true);
field.set(data, null);
于 2012-06-27T20:10:31.737 回答