gpt4 book ai didi

java - 私有(private)访问控制

转载 作者:行者123 更新时间:2023-12-01 23:54:44 24 4
gpt4 key购买 nike

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

举个例子

public Cat {

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

}

是否可以从此类外部找到 numberOfWhiskers 的值?

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

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

最佳答案

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

此代码可以在另一个类中:

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[],您可以使用它来迭代该类的所有字段。

Field[] fields = Cat.class.getDeclaredFields();
// Iterate over the array here.

关于java - 私有(private)访问控制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15775350/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com