java - 从外部类访问内部类的私有(private)实例变量

标签 java private inner-classes

为什么这段代码不起作用

public class BB
{
    private class A
    {
        private int x;
    }

    public static void main(String[] args)
    {
        A a = new A();
        a.x = 100;
        System.out.println(a.x);
    }
}

这段代码正在运行吗?

public class BB
{
    private class A
    {
        private int x;
    }

    static int y = 3;

    public static void main(String[] args)
    {
        BB b = new BB();
        b.compile();
        System.out.println("y = "+ y);
    }
    public void compile()
    {
        A a = new A();
        a.x = 100;
        System.out.println(a.x);
        System.out.println("y = "+ y);
    }
}

在第一个代码中,当我尝试通过内部类“a”的对象引用内部类“A”的实例变量“x”时,我收到一条错误消息,说我正在静态中使用内部类语境。 在其他方法中执行相同操作时没有错误。

最佳答案

您的错误与字段访问无关。此行编译失败:

A a = new A();

原因:如果没有封闭实例,则无法实例化内部类,而这正是该行代码试图执行的操作。你可以这样写

A a = (new BB()).new A();

它将提供一个内联的封闭实例。然后您也将能够访问私有(private)字段。

或者,只需将 A 类设为 static,这意味着它没有封闭实例。

关于java - 从外部类访问内部类的私有(private)实例变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18825718/

相关文章:

api - Apple 应用指南——私有(private) API?

c++ - 访问类变量时遇到问题

image - 使用 Docker 从私有(private)注册表加载具有依赖项的镜像

单独文件中的 Java 静态嵌套类

java - 对象实例化 : Inner class and outer class with the same name (Java)

java - 使用两个 TextView 将过滤器添加到 ListView

java - 检查一个方法是否在另一个方法中被调用

java - 添加内部标签会给字符串变量带来错误

java - 具有基本 token 身份验证的 OkHttp 适用于 GET,但不适用于 DELETE

java - Oracle 如何在从 plsql 调用 java 时导入缺少的 java 类