【发布时间】:2014-02-27 08:48:34
【问题描述】:
为什么我不能在以不同方法定义的内部类中引用非 final 变量?
我已经看到有关此的主题,其中大多数人说您的组件应该是 final 并且... .但是没人说为什么?!!而且我不知道这个限制背后的哲学是什么。
更让我困惑的是,下面的代码是错误的:
JButton removeJBtn = new JButton("Remove");
JButton addJBtn = new JButton("Add");
//...
btnNewButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
removeJBtn.disable();//Error here,Cannot ...
}
});
如果我定义了
JButton removeJBtn
作为成员字段(在类的主体中,而不是方法中),它不需要定义为 final!
对于我(可能还有其他许多人)一直面临的每日限制,我将非常感谢任何合乎逻辑的答案。
尊敬的将此问题标记为重复的用户,请至少提供对原始问题的参考(已确定回答!),在我的问题上方添加了一个链接,我已通读但已完整由于矛盾,有人(88 票赞成)说 java 捕获了最终变量的值,但它被下面的评论(16 票)完全拒绝。
【问题讨论】:
-
看看为什么here
-
注意:内部类和匿名类是完全不同的东西!
-
@Smutje:你能解释一下吗?
-
好吧,应该花更多的时间:匿名类是一种特殊的内部类。有关详细信息,请参阅docs.oracle.com/javase/tutorial/java/javaOO/nested.html
标签: java inner-classes final