Java中如何通过反射访问私有变量呢?
下文笔者将讲述反射中访问私有变量的方法分享,如下所示
报错代码
今天使用java代码访问私有变量时
出现以下异常报错:
IllegalAccessException
这种报错就是变量设置为private导致的
我们必须对字段进行相应设置
才能使用反射访问其变量
例:报错代码
public class TestClass {
private int fieldTest;
public TestClass() {
fieldTest = 888;
}
public static Object getInstanceField(Object instance, String fieldName) throws Throwable {
Field field = instance.getClass().getDeclaredField(fieldName);
return field.get(instance);
}
}
//当我们使用getInstanceField()访问字段时
//将会出现相应的错误信息
TestClass t = new TestClass();
Object val = TestClass.getInstanceField(t, "fieldTest");
以上代码将会报IllegalAccessException
此时我们只需进行以下调整,即可避免相应的异常发生
public static Object getInstanceField(Object instance, String fieldName) throws Throwable {
Field field = instance.getClass().getDeclaredField(fieldName);
//使用反射可访问private修饰的字段
field.setAccessible(true);
return field.get(instance);
}
版权声明
本文仅代表作者观点,不代表本站立场。
本文系作者授权发表,未经许可,不得转载。


