匿名类访问局部变量

时间:2018-09-11 18:05:28

标签: java anonymous-class

如果您在下面看我的代码,您会看到我在方法M()中声明了int x = 0。然后,我在上述方法中声明一个匿名类,并声明int z = x。我的问题是我虽然不允许这样做,因为x是在匿名类存在的封装方法中定义的,并且不是常量。也许我误会了一些东西。有人可以帮我解决我的困惑吗?

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() {}
        });
    }
}

2 个答案:

答案 0 :(得分:3)

x变量实际上是最终变量,因此可以在匿名类(从Java SE 8开始)中使用。

有关其他信息,您可以检查this thread

答案 1 :(得分:-1)

我还使用了变通方法女巫包装器最终对象。这样,对象实际上是最终的,但是您可以更改其中的值。

最终计数器counter = new Counter(); 在匿名课程中,您可以执行以下操作: 计数器。 gainValue();