内部类引用外部变量,强制使用final关键字的理解

以andorid onCreate方法为例

   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_progress_bar);
         final ProgressBar progressBar = findViewById(R.id.pg_1);
        new Thread(new Runnable() {
            @Override
            public void run() {
                try {
                    for (int i = 0; i < 100; i++) {
                        Thread.sleep(1000);
                        progressBar.setProgress(i + 1);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }).start();

这样写的实现目标是,希望修改外部变量progressBar;
程序的真正实现过程是把外部变量,复制一份到内部类的成员变量中,

//模拟代码
class MyRunable{
private ProgressBar progressBar;
MyRunable(ProgressBar bar){
this. progressBar=bar;
}
  @Override
            public void run() {
                try {
                    for (int i = 0; i < 100; i++) {
                        Thread.sleep(1000);
                        progressBar.setProgress(i + 1);
                    }
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
}
引用类型,在内部类做出改变后渲染到外部类上,需要保证引用不发生改变。基本类型,外部类修改了其值,内部类用的还是已复制好的数据。这样期望相同的发生了变化。
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容