匿名类访问局部变量

问题描述 投票:2回答:2

如果你看下面的代码,你会看到我在方法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() {}
        });
    }
}
java anonymous-class
2个回答
3
投票

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

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


-1
投票

我还使用了workaround witch wrapper final object。通过这种方式,对象实际上是最终的,但您可以更改其中的值。

final counter counter = new Counter();在匿名课你可以做:反击。 increaseValue();

© www.soinside.com 2019 - 2024. All rights reserved.