【发布时间】:2011-04-24 01:04:20
【问题描述】:
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,我会看到错误“Cannot reference an non-final variable jtfContent inside an internal class defined in a different method”。
为什么匿名内部类必须要求外部类实例变量是 final 才能访问它?
【问题讨论】:
-
我注意到这个问题比它声称是重复的问题更早。
-
@Raedwald 根据各自的元讨论,问题的时间并不重要:Should I vote to close a duplicate question, even though it's much newer... - “如果新问题是更好的问题或有更好的答案,则投票结束旧的与新的重复..."
-
有人能解释一下为什么在 Java 1.8 中这段代码会通过编译吗?
-
因为在 Java 8 中,它允许 final 或 实际上是 final 的变量在这里通过编译器。
-
@bruno 这不应该是“局部”变量或方法参数,而不是外部“实例”变量吗?
标签: java inner-classes