请问把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对象,典型闭包问题。