Android:使用java反射更改私有静态最终字段 [英] Android: changing private static final field using java reflection

查看:703
本文介绍了Android:使用java反射更改私有静态最终字段的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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

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

I followed the instructions in the link above to change a private static final field using java reflection. I have an object named "data." Inside "data," there is a private static final variable named "type." I want to set "type" to be 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);

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

I tried doing this on Java 1.7 with similar code and it worked. But running this code on Android produces the following error: java.lang.NoSuchFieldException: modifiers

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

I guess "modifiers" is not a field in the Field class on Android.

如何修复此问题?

推荐答案

这适用于非静态字段。

This works for non-static fields.

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

这篇关于Android:使用java反射更改私有静态最终字段的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆