swt

在addSelectionListener的方法public void widgetSelected(SelectionEvent e){}中,我用到了label和combo,为什么声明
label和combo这两个变量的时候要用final修饰呢。。否则一直报错还有shell加final修饰有什么意义?

解决方案 »

  1.   

    因为你添加的事件类是一个内部内 只有final的属性才能被内部内访问
    你试试就知道了
      

  2.   

    1.label的生命周期较短,比如当前方法或代码块里.
    2.SelectionListener的周期和组件相同,因此一般要远远大于label.
    3.当要在SelectionListener中使用label的时候就出现了问题,很有可能label的生命周期已经结束了.因此实际运行时,虚拟机会在SelectionListener中放一个label的副本.
    4.此时又会出现一个问题,如果在创建了label的副本后,结果在label生命周期结束前,label又指向别的对象怎么办?(理论上,这样不是不可以,但是这样就会把问题变复杂,也没必要.)
    5.所以就需要设置为final,保证label不会再去指向其他的对象.