防止匿名类在 Java 中引用外部成员
Posted
技术标签:
【中文标题】防止匿名类在 Java 中引用外部成员【英文标题】:Prevent anonymous class from referencing outer members in Java 【发布时间】:2015-11-13 02:49:38 【问题描述】:在 Java 中,有没有办法显式阻止匿名类引用外部类或方法的成员/局部变量?
【问题讨论】:
不要让它成为一个匿名类? 为什么这是你想要的东西? 不要相信,因为你总是可以从内部类做到这一点:Class.this.member
***.com/questions/758570/…
叹息,为什么这被否决/关闭?这是一个合法、客观、具体的编程问题,对其他人和 OP 都有潜力。
【参考方案1】:
没有。您总是在其他类中定义匿名类,例如
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";
为什么要限制对外部类的访问?一旦我们知道了这一点,我们就可以更好地了解您想要实现的目标。
【讨论】:
所以对于 Java 8,我想将像 Function 这样的 lambda 传递到某些地方,并且我希望 lambda 完全是输入到输出的函数,不能使用其他东西在 lambda 之外。 @Pinch:你为什么要那个?您的目标是执行“纯”功能吗?你是个失败者,因为我仍然可以new Random().nextInt()
或MySingletonClass.getSomethingElse()
@Pinch lambda 不是匿名类。没有对封闭实例的引用。它们只保留在正文中明确使用的引用。
@PaulBoddington:lambda 的行为是否没有引用外部类实例记录在案?
@Pinch 阅读:cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html 相关位是 7: Variable Capture,但整本书值得一读。以上是关于防止匿名类在 Java 中引用外部成员的主要内容,如果未能解决你的问题,请参考以下文章