如何在本地内部类中访问外部类方法局部变量?

时间:2018-02-15 07:01:27

标签: java inner-classes local-variables

public class MyClass {
    int x=9;
    public static void main(String args[]) {
       MyClass  myClass = new MyClass();
       myClass.test();
    }

    public void test(){
        int x=10;

        class InnerClass{
            int x = 11;

            void print(){
               int x = 12;
               System.out.println(x); 
               System.out.println(this.x); 
               System.out.println(MyClass.this.x); 
               System.out.println("MyClass => test() => x :" + "?");
            }
        }
        InnerClass innerClass = new InnerClass();
        innerClass.print();
    }
}

如何在InnerClass test()方法中调用MyClass print()方法局部变量 x 。我可以在上一个System.out.println()方法中代替编写内容,以获取test() x 的值。

3 个答案:

答案 0 :(得分:1)

不幸的是Java你无法做到。

访问xMyClass::test的唯一方法是将内部类和内部类方法中的两个变量重命名为其他变量。

没有必要重命名外部class字段x,因为InnerClass::print会考虑最内部范围内的变量。

虽然此代码段用于演示目的,但更好的做法是让每个变量都有不同且更重要的名称。

答案 1 :(得分:-1)

这对我来说很好:

public class Outerclass {

    public static void main(String args[]) {
        Outerclass outer = new Outerclass();
        outer.outerMethod();
    }

    // method of the outer class 
    void outerMethod() {
        int num = 23;

        // method-local inner class
        class MethodInnerClass {
            public void print() {
                System.out.println("This is method inner class "+num);
            }
        }
        // Accessing the inner class
        MethodInnerClass inner = new MethodInnerClass();
        inner.print();
    }
}

答案 2 :(得分:-2)

要打印外部类变量,请使用

 MyClass.this.x