首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >私有访问控制

私有访问控制
EN

Stack Overflow用户
提问于 2013-04-02 22:10:26
回答 1查看 100关注 0票数 0

我只是在想:由于访问控制只是为了防止意外事故而不是欺诈,所以我想知道是否有可能访问Java中隐藏变量的值?

举个例子

代码语言:javascript
复制
public Cat {

public int numberOfLegs = 4;
private int numberOfWhiskers = 42;

}

是否有可能从该类之外找到numberOfWhiskers的值?

编辑:我已经阅读了链接中的线程,我可以看到,通过使用SetAccesible(),您可以获得任何您知道名称的私有字段的值。我们能找到我们不知道名称的字段的值吗?

注意:这个可以在某些语言(例如C++ )中完成,例如通过在类中的字段中使用指针来迭代。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-04-02 22:16:08

您可以使用反射绕过private检查。使用Class#getDeclaredField方法和Field#getInt方法(还有其他访问器)。

此代码可以位于另一个类中:

代码语言:javascript
复制
Cat myCat = new Cat();
int whiskers;

try
{
    Field field = Cat.class.getDeclaredField("numberOfWhiskers");
    // This line bypasses the private control
    field.setAccessible(true);
    whiskers = field.getInt(myCat);
}
catch (NoSuchFieldException e) { /* Handle */ }
catch (IllegalAccessException e) { /* Handle */ }

编辑

我见过这个重复问题的链接。我必须同意,通常情况下,不要这样做。

二次编辑

作为对附加编辑问题的回应,您可以使用Class#getDeclaredFields方法返回一个Field[],您可以用它来迭代类的所有字段。

代码语言:javascript
复制
Field[] fields = Cat.class.getDeclaredFields();
// Iterate over the array here.
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15775350

复制
相关文章

相似问题

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