作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在一次学校测试中,我在匿名内部类中使用了非最终变量。在学校计算机和我的私有(private)计算机(使用 x86 jre1.8.0_45)上它正在工作。
但是,在老师的笔记本电脑上,Eclipse 显示错误(变量应使用 final)。他使用的是jre1.8.0.x版本(不知道确切的版本)。
知道为什么它在我的电脑上运行而不在他的电脑上运行吗?
在此代码示例中,没有在 ActionListener 的 actionPerformed 函数中使用最终对象 jLabel:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JLabel;
public class Main {
public Main(String[] args) {
JLabel jLabel = new JLabel();
JButton button = new JButton();
button.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
jLabel.setText("xyz");
}
});
}
}
最佳答案
较新的 java 版本在这个问题上更能容忍:它们只要求它们应该是“有效最终的”。
最后,差别不是太大——你只能使用你可以用 final
标记的变量;您不得修改它们。
如果你在那个地方,你也可以让它们“真正”final
,而且它在任何地方都有效。
顺便说一句,在 1.8 上,使用新的 lambda 语法你可以写得更优雅
button.addActionListener((ActionEvent arg0) -> jLabel.setText("xyz"));
关于Java - 在匿名内部类中使用非最终变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34136377/
我是一名优秀的程序员,十分优秀!