简体   繁体   English

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

[英]Android: changing private static final field using java reflection

Change private static final field using Java reflection 使用Java反射更改私有静态final字段

I followed the instructions in the link above to change a private static final field using java reflection. 我按照上面链接中的说明使用java反射更改了私有静态final字段。 I have an object named "data." 我有一个名为“数据”的对象。 Inside "data," there is a private static final variable named "type." 在“数据”里面,有一个名为“type”的私有静态最终变量。 I want to set "type" to be null. 我想将“type”设置为null。 Here is my 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);

I tried doing this on Java 1.7 with similar code and it worked. 我尝试在Java 1.7上使用类似的代码执行此操作。 But running this code on Android produces the following error: java.lang.NoSuchFieldException: modifiers 但是在Android上运行此代码会产生以下错误: java.lang.NoSuchFieldException:modifiers

I guess "modifiers" is not a field in the Field class on Android. 我猜“修饰符”不是Android上Field类中的一个字段。

How do I fix this? 我该如何解决?

This works for non-static fields. 这适用于非静态字段。

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM