作者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
1F:推 PsMonkey:==.=== valueChanged 是类别? 02/23 13:11
2F:→ 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)
3F:→ tkcn:valueChanged "不" 是内部匿名类别.. 02/23 13:34
4F:推 snowlike:内部类别指的是TSL,valueChanged是该介面必须覆写的方法 02/23 13:37
5F:→ foxenangel:可以请问是什麽吗?? 02/23 13:37
6F:→ foxenangel:S大请问可以解释清楚一点吗,新手看不太懂 T_T 02/23 13:38