首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Java反射-setAccessible的影响(True)

Java反射-setAccessible的影响(True)
EN

Stack Overflow用户
提问于 2012-05-17 23:33:38
回答 2查看 77K关注 0票数 118

我正在使用一些注释来动态设置类中字段的值。因为我希望这样做,而不管它是公共的、受保护的还是私有的,所以每次在调用set()方法之前,我都会在Field对象上调用setAccessible(true)。我的问题是,setAccessible()调用对字段本身有什么样的影响?

更具体地说,假设它是一个私有字段,并且这组代码调用setAccessible(true)。如果代码中的其他位置通过反射检索相同的字段,那么该字段是否已经可以访问?或者getDeclaredFields()getDeclaredField()方法每次都会返回Field对象的新实例?

我猜另一种表述问题的方式是,如果我调用setAccessible(true),那么在调用完成后将其设置回原始值有多重要?

EN

回答 2

Stack Overflow用户

发布于 2012-05-17 23:41:10

getDeclaredField方法每次都必须返回一个新对象,这正是因为该对象具有可变的accessible标志。因此,不需要重置标志。你可以在this blog post上找到完整的细节。

票数 35
EN

Stack Overflow用户

发布于 2013-11-23 17:45:53

代码语言:javascript
复制
import java.lang.reflect.Field;
import java.lang.reflect.Method;

public class PrivateVariableAcc {

    public static void main(String[] args) throws Exception {
        PrivateVarTest myClass = new PrivateVarTest();
        Field field1 = myClass.getClass().getDeclaredField("a");
        field1.setAccessible(true);
        System.out.println("This is access the private field-"
            + field1.get(myClass));
        Method mm = myClass.getClass().getDeclaredMethod("getA");
        mm.setAccessible(true);
        System.out.println("This is calling the private method-"
            + mm.invoke(myClass, null));
    }

}
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10638826

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档