Java反射-setAccessible(true)的影响
我正在使用一些注释来动态设置类中字段的值。由于我想执行此操作,而不管它是公共的,受保护的还是私有的,因此setAccessible(true)
每次调用该set()
方法之前,我都会在Field对象上进行调用。我的问题是,setAccessible()
电话会议对该领域本身会产生什么样的影响?
更具体地说,假设它是一个私有字段,并且这组代码调用setAccessible(true)
。如果代码中的其他位置要通过反射来检索相同的字段,那么该字段是否已经可以访问?还是getDeclaredFields()
和getDeclaredField()
方法每次都返回Field对象的新实例?
我想说明问题的另一种方式是,如果我打电话setAccessible(true)
,完成后将其设置回原始值有多重要?
回答:
随setAccessible()
您更改的行为AccessibleObject
,即Field
实例,但不更改类的实际字段。这是文档(节选):
值
true
表示使用该反射对象时,应禁止检查Java语言访问控制
和一个可运行的示例:
public class FieldAccessible { public static class MyClass {
private String theField;
}
public static void main(String[] args) throws Exception {
MyClass myClass = new MyClass();
Field field1 = myClass.getClass().getDeclaredField("theField");
field1.setAccessible(true);
System.out.println(field1.get(myClass)); // no exception
Field field2 = myClass.getClass().getDeclaredField("theField");
System.out.println(field2.get(myClass)); // IllegalAccessException
}
}
以上是 Java反射-setAccessible(true)的影响 的全部内容, 来源链接: utcz.com/qa/412245.html