内部类引用外部变量,强制使用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();
                }
}
引用类型,在内部类做出改变后渲染到外部类上,需要保证引用不发生改变。基本类型,外部类修改了其值,内部类用的还是已复制好的数据。这样期望相同的发生了变化。

你可能感兴趣的:(内部类引用外部变量,强制使用final关键字的理解)