作者foxenangel (該來的還是跑不掉阿)
看板java
標題[問題] 關於final
時間Tue Feb 23 13:10:34 2010
請問一下
我在關於swing的書中讀到JTree的程式碼
但是對於一小段有點疑惑
片段如下
final JLabel messageLabel=new JLabel("Nothing selected.");
^^^^^
add(messageLabel, BorderLayout.SOUTH);
tree.addTreeSelectionListener(new TreeSelectionListener() {
public void valueChanged(TreeSelectionEvent e) {
TreePath tp=e.getNewLeadSelectionPath();
messageLabel.setText("Selected: "+tp.getLastPathComponent() );
} ^^^^^^^^^^^^
});
我查小螞蟻他說final指定出不可修改的變數,我不了解的是為什麼我把final拿掉的話
會出現錯誤訊息:local variable messageLabel is accessed from within inner class
; needs to declared final
另外,我想請問addTreeSelectionListener那段裡面的valueChanged這個類別可以拉出來
跟addTreeSelectionListener成同一個scope嗎?不太懂為什麼一定要宣告這個類別
煩請指教,謝謝!
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.138.152.25
推 PsMonkey:==.=== valueChanged 是類別? 02/23 13:11
→ foxenangel:錯誤訊息寫inner class,所以我想它是類別... 02/23 13:16
查到了
http://caterpillar.onlyfun.net/Gossip/JavaGossip-V1/InnerClass.htm
valueChanged是內部匿名類別,messageLabel是區域變數,valueChanged在用這個變數
時,實際上是複製一份,所以要宣告成final,以防變更
※ 編輯: foxenangel 來自: 140.138.152.25 (02/23 13:30)
→ tkcn:valueChanged "不" 是內部匿名類別.. 02/23 13:34
推 snowlike:內部類別指的是TSL,valueChanged是該介面必須覆寫的方法 02/23 13:37
→ foxenangel:可以請問是什麼嗎?? 02/23 13:37
→ foxenangel:S大請問可以解釋清楚一點嗎,新手看不太懂 T_T 02/23 13:38