Java 如何访问局部内部类中的局部变量具有类似于局部变量名称的字段名

Java 如何访问局部内部类中的局部变量具有类似于局部变量名称的字段名,java,Java,如何访问局部变量 void do1() { final int i = 1; // (*) class A { int i = 2; void do2() { //how to access local variable i (*) ? } } } 由于类变量对其进行了阴影处理,因此无法执行此操作。克服此问题的最简单方法是重命名其中一个变量。这里有两个选项: 将外部i值传递给A class Ma

如何访问局部变量

void do1() {

    final int i = 1; // (*)

    class A {
        int i = 2;
        void do2() {
            //how to access local variable i (*) ?
        }
    }
}

由于类变量对其进行了阴影处理,因此无法执行此操作。克服此问题的最简单方法是重命名其中一个变量。

这里有两个选项:

将外部
i
值传递给
A

class Main {
    public static void main(String[] args) {
        new Main().do1();
    }

    void do1() {

        final int i = 1; // (*)

        class A {
            A(int outerI) {
                this.outerI = outerI;
            }

            private int outerI;
            int i = 2;
            void do2() {
                System.out.println(outerI); // I want 1 here.
            }
        }

        new A(i).do2();
    }
}
或使用合理的变量名:

class Main {
    public static void main(String[] args) {
        new Main().do1();
    }

    void do1() {

        final int i = 1; // (*)

        class A {
            int j = 2;
            void do2() {
                System.out.println(i);
            }
        }

        new A().do2();
    }
}

请为您的问题添加更多解释。简单地说:您不能,因为
i
是本地的。但是您可以在对象创建时将
a
的构造函数添加到hand
i
中。@clcto 1)代码在我的IDE(IntelliJ)中“原样”编译,2)不,
i
这个。i
a
i
,而不是
do1()
中的局部变量
i
,有没有办法访问DO1方法中的局部变量i?@ShenAu是的,创建一个接受
i
的构造函数,并调用它来创建
a
的对象。