请问,java 鼠标响应事件 传参为什么要加final?

public NeedMenuItem(final JFrame frame,final JTabbedPane jtb) {
// TODO Auto-generated constructor stub
super();
itemAbout.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,
ActionEvent.CTRL_MASK));
itemAbout.addActionListener(new ActionListener() {

@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
jtb.setSelectedIndex(1);
}
});
}
我认为actionPerformed这个是个回调函数,那么为什么传入的参数要加final???

第1个回答  2013-06-14
可以不加,只是避免内部被修改。actionperformed是接口的方法追问

我需要内部调用,如果不加,怎么处理??

第2个回答  2013-06-14
因你的参数可能要被内部类使用,所以要求必须是final追问

我知道必须final,但是原理是什么呀?

追答

内部类引用外部类局部变量时必须保证局部变量是final的,是为了保证内部类与外部类的变量的同步,因为内部类在调用时会在类里生成一个copy,这就跟多线程同步一个道理了,使用final就可以最简单地保证同步

本回答被提问者采纳
相似回答