防止匿名类在Java中引用外部成员

防止匿名类在Java中引用外部成员,java,Java,在Java中,有没有办法显式防止匿名类引用外部类或方法的成员/局部变量 没有。您总是在其他类中定义匿名类,例如 class A { private String aMember; public void test() { B b = new B() { @Override public void b() { ... } }; } }

在Java中,有没有办法显式防止匿名类引用外部类或方法的成员/局部变量

没有。您总是在其他类中定义匿名类,例如

class A {

    private String aMember;

    public void test() {
        B b = new B() {

            @Override
            public void b() {
                ...
            }
        };
    }
}
您始终可以使用
OuterClassName.this.something
访问外部类:

@Override
public void b() {
    A.this.aMember = "Hello";
}

为什么要限制对外部类的访问?一旦我们知道了这一点,我们就可以更好地理解您想要实现的目标。

不要让它成为一个匿名类?为什么这是您想要的?不要这么认为,因为您总是可以从内部类执行此操作:
类。this.member
叹气,为什么这会被否决/关闭?这是一个合法的、客观的、特定的编程问题,对其他人和OP都有潜在的影响。因此,对于Java 8,我希望将类似lambda的函数传递到某些地方,我希望lambda完全是一个从输入到输出的函数,而不能使用lambda之外的其他函数。@Pinch:为什么要这样?您的目标是实施“纯”功能吗?你是个失败者,因为我仍然可以
new Random().nextInt()
MySingletonClass.getSomethingElse()
@Pinch lambda不是匿名类。没有对封闭实例的引用。它们只保留正文中显式使用的引用。@PaulBoddington:lambda的行为没有引用外部类实例吗?@Pinch阅读:相关位是7:变量捕获,但整个内容值得阅读。