我有以下代碼。這是「正確的」,哪些我不明白:爲什麼我的對象看到構造函數中沒有賦予的變量?
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
我使用final
i
和label
之前。我想我使用了final
,因爲編譯器想要。但我不明白爲什麼。
相關問題:http://stackoverflow.com/questions/1950807/anonymous-inner-classes-inside-methods – missingfaktor 2010-03-23 17:40:34