1

我有一个代码,我有一个小问题。

public class Out {
  int value = 7;
  void print() {
    int value = 9;//how to access this variable
    class Local {
      int value = 11;
      void print() {
        int value = 13;
        System.out.println("Value in method: " + value);
        System.out.println("Value in local class: " + this.value);
        System.out.println("Value in method of outer class: " + value);//here
        System.out.println("Value in outer class: " + Out.this.value);
      }
    }
  }
}

上面的代码描述了我的问题。

4

2 回答 2

2

根本做不到,因为它需要传入Local的构造函数,因为它不是类的成员字段,而是局部方法变量。

按照 Andy 的建议,你可以将它设为 final 的名称不同,在这种情况下,编译器会将其隐式传递给 Local 构造函数,并将其保存为 Local 的成员字段(您可以使用 javap 查看详细信息)。

于 2015-05-05T07:25:13.507 回答
0

如果你想在局部内部类中使用局部变量,那么我们应该将该变量声明为 final。

试试这个代码。

int value = 7;
void print() {
    final int value1 = 9;//change the variable name here. 
                  //Otherwise this value is overwritten by the variable value inside Inner class method
    class Local {
        int value = 11;
        void print() {
            int value = 13;
            System.out.println("Value in method: " + value);
            System.out.println("Value in local class: " + this.value);
            System.out.println("Value in method of outer class: " + value1);//here
            System.out.println("Value in outer class: " + Out.this.value);
        }
    }
   Local l1 = new Local();
   l1.print();

}

public static void main(String[] args) {
    Out o1 = new Out();
    o1.print();
}

谢谢。

于 2015-05-05T07:58:53.580 回答