为什么匿名内部类使用的参数必须为final?

解决方案 »

  1.   

    不是说匿名内部类的参数必须 final 而是一个方法内的内部类如果使用了这个方法的参数或者局部变量的话,这个参数或局部变量应该是 final 。假设:
    我们在方法内定义了一个 匿名的 Thread 子类,他使用了方法的局部参数,然后我让这个线程运行去,因为是不同的线程,那么当我这个方法的启动线程的语句执行过了,而且我修改了这个参数或局部变量,那么那个线程启动执行的时候是不是会出现莫名其妙的问题:运行时刻能访问到的变量太难以捉摸了,我是该复制一份过去给新线程运行时使用还是到时候再来取呢(再来取时已经物是人非了)?Java 为了消除这个编程中可能出现的歧义,使用方法内的内部类时如果访问了方法的参数或局部变量,那么它应该是 final 的。
      

  2.   

    JAVA 语法以简单著称,内部类是非复杂的 JAVA 语法,一定程序上败坏了 JAVA 的好名声。内部类主要用于 AWT 事件模型,楼主可以结合 JBuilder 这样的工具看一下内部类的使用。匿名内部类合理使用的场合非常少见,我只在别人写的基础结构类代码中见过。
      

  3.   

    匿名内部类的参数不一定要是final 把
    只要注意没个变量的作用域就行了
    没那么复杂吧
      

  4.   

    在方法中定义的内部类只能访问方法中的final类型的局部变量,因为用final定义的局部变量相当于是一个常量,他的生命周期超出方法运行的生命周期