匿名 Class 访问局部变量
Anonymous Class Accesing Local Variables
如果您查看下面的代码,您会发现我在方法 M() 中声明了 int x = 0。然后我在所述方法中声明一个匿名 class 并声明 int z = x。我的问题是我虽然不允许这样做,因为 x 是在匿名 class 存在的封装方法中定义的,并且不是常量。也许我误会了什么。有人可以帮我解惑吗?
public class SomeClass {
public void someMethod(Super pObj) {}
}
public class Super {
public Super() {}
public void aMethod() {}
}
public class SubClass extends Super {
public void M() {
SomeClass someObject = new SomeClass();
int x = 0;
someObject.someMethod(new Super() {
int z = x;
@Override public void aMethod() {}
});
}
}
x
变量 最终有效 ,因此可以在匿名 class 中使用(从 Java SE 8 开始)。
有关更多信息,您可以查看 this thread
我还使用了解决方法 包装最终对象。这样,对象实际上是最终的,但您可以更改其中的值。
最终计数器counter = new Counter();
在匿名 class 你可以这样做:
柜台。增加价值();
如果您查看下面的代码,您会发现我在方法 M() 中声明了 int x = 0。然后我在所述方法中声明一个匿名 class 并声明 int z = x。我的问题是我虽然不允许这样做,因为 x 是在匿名 class 存在的封装方法中定义的,并且不是常量。也许我误会了什么。有人可以帮我解惑吗?
public class SomeClass {
public void someMethod(Super pObj) {}
}
public class Super {
public Super() {}
public void aMethod() {}
}
public class SubClass extends Super {
public void M() {
SomeClass someObject = new SomeClass();
int x = 0;
someObject.someMethod(new Super() {
int z = x;
@Override public void aMethod() {}
});
}
}
x
变量 最终有效 ,因此可以在匿名 class 中使用(从 Java SE 8 开始)。
有关更多信息,您可以查看 this thread
我还使用了解决方法 包装最终对象。这样,对象实际上是最终的,但您可以更改其中的值。
最终计数器counter = new Counter(); 在匿名 class 你可以这样做: 柜台。增加价值();