【发布时间】:2010-03-20 18:30:02
【问题描述】:
我有以下代码。哪个是“正确的”,哪个我不明白:
private static void updateGUI(final int i, final JLabel label) {
SwingUtilities.invokeLater(
new Runnable() {
public void run() {
label.setText("You have " + i + " seconds.");
}
}
);
}
我创建 Runnable 类的新实例,然后在该实例的 run 方法中使用变量 label 和 i。它有效,但我不明白它为什么有效。为什么所考虑的对象会看到这些变量的值。
根据我的理解,代码应该是这样的(而且是错误的):
private static void updateGUI(final int i, final JLabel label) {
SwingUtilities.invokeLater(new Runnable(i,label) {
public Runnable(int i, JLabel label) {
this.i = i;
this.label = label;
}
public void run() {
label.setText("You have " + i + " seconds.");
}
});
}
所以,我会将i 和label 变量提供给构造函数,以便对象可以访问它们...
顺便说一句,在updateGUI 中,我在i 和label 之前使用final。我想我使用了final,因为编译器想要这样。但我不明白为什么。
【问题讨论】:
标签: java variables constructor visibility