hoyong

导航

关于Android开发中某个参数遇到了inner class 需要被定义为final(转)

关于Android开发中某个参数遇到了inner class 需要被定义为final

 

在JVM中,内部类不是直接调用方法的参数,而是内部类将传进来的参数通过自己的构造器备份到了自己的内部,自己内部的方法调用的实际是自己的属性而不是外部类方法的参数。

比如:

    class A{
        final string a="aabbcc";
        class B{
            print(a);
        }
    }

类A中的内部类B的函数print()调用了定义在A中的参数a,这个时候如果不加final,就会出错。

因为内部类被编译的时候会生成一个单独的内部类的.class文件,这个文件并不与外部类在同一class文件中。

如果内部类改掉了这些参数的值也不可能影响到原参数,然而这样却失去了参数的一致性,因为从编程人员的角度来看他们是同一个东西,如果编程人员在程序设计的时候在内部类中改掉参数的值,但是外部调用的时候又发现值其实没有被改掉,这就让人非常的难以理解和接受,为了避免这种尴尬的问题存在,所以编译器设计人员把内部类能够使用的参数设定为必须是final来规避这种莫名其妙错误的存在。

posted on 2019-11-15 14:15  hoyong  阅读(168)  评论(0编辑  收藏  举报