首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 移动开发 > Android >

请教把Dialog声明为final有什么好处

2012-01-31 
请问把Dialog声明为final有什么好处?Java codepublic class AlertDialogStudy extends Activity {14/** Ca

请问把Dialog声明为final有什么好处?

Java code
public class AlertDialogStudy extends Activity {14        /** Called when the activity is first created. */15        @Override16        public void onCreate(Bundle savedInstanceState) {17            super.onCreate(savedInstanceState);18            setContentView(R.layout.main);19     20            // get button21            Button btnShow = (Button)findViewById(R.id.btn_show);22            btnShow.setOnClickListener(new View.OnClickListener() {23     24                @Override25                public void onClick(View v) {26                    AlertDialog.Builder builder = new AlertDialog.Builder(v.getContext());27                    builder.setTitle("Auto-closing Dialog");28                    builder.setMessage("After 2 second, this dialog will be closed automatically!");29                    builder.setCancelable(true);30     31                    final AlertDialog dlg = builder.create();32     33                    dlg.show();34     35                    final Timer t = new Timer();36                    t.schedule(new TimerTask() {37                        public void run() {38                            dlg.dismiss(); // when the task active then close the dialog39                            t.cancel(); // also just top the timer thread, otherwise, you may receive a crash report40                        }41                    }, 2000); // after 2 second (or 2000 miliseconds), the task will be active.42     43                }44            });45        }46    }

这段代码中的dialog被声明为final,请问这样做有什么好处呢?

[解决办法]
使用final方法的原因有二:
  第一、把方法锁定,防止任何继承类修改它的意义和实现。
  第二、高效。编译器在遇到调用final方法时候会转入内嵌机制,大大提高执行效率。

在这里使用final,应该只是单纯的让run方法里面可以调用到Dialog对象。
[解决办法]
楼下回答是靠谱。

这是java处理闭包的功能。

如果按照楼主的代码将 final 去掉,那么在run方法中就无法访问t对象,典型闭包问题。

热点排行