This question already has answers here:
Why are only final variables accessible in anonymous class?
(14个回答)
Cannot refer to a non-final variable inside an inner class defined in a different method
(20个答案)
5年前关闭。
如果省略
为什么匿名内部类必须要求外部类实例变量为final才能访问它?
(14个回答)
Cannot refer to a non-final variable inside an inner class defined in a different method
(20个答案)
5年前关闭。
final JTextField jtfContent = new JTextField();
btnOK.addActionListener(new java.awt.event.ActionListener(){
public void actionPerformed(java.awt.event.ActionEvent event){
jtfContent.setText("I am OK");
}
} );
如果省略
final
,则会看到错误“无法在用其他方法定义的内部类中引用非最终变量jtfContent”。为什么匿名内部类必须要求外部类实例变量为final才能访问它?
最佳答案
首先,让我们放松一下,请放下那把枪。
好。现在,语言坚持的原因是它作弊是为了让您的内部类函数可以访问他们渴望的局部变量。运行时会复制本地执行上下文(以及其他适当的内容),因此它坚持要求您将所有内容都设为final
,以便保持诚实。
如果不这样做,那么在构造对象之后但在内部类函数运行之前更改局部变量值的代码可能会令人困惑和奇怪。
这是围绕Java和“闭包”进行的许多讨论的精髓。
注意:开头段落是关于OP原始构成中的一些大写字母的笑话。