日期:2014-05-20  浏览次数:20569 次

咨询个内部类的问题
疯狂Android讲义有段代码如下,其中匿名内部类用到了外部的show对象,但为什么show不用final呢?望高手帮忙解答,万分感谢!



public class AnonymousListener extends Activity
{
  EditText show;
  Button bn;  

  @Override
  publicvoid onCreate(Bundle savedInstanceState)
  {
     super.onCreate(savedInstanceState);
     setContentView(R.layout.main);
     show = (EditText)findViewById(R.id.show);
     bn = (Button)findViewById(R.id.bn);

     //直接使用Activity作为事件监听器
     bn.setOnClickListener(new OnClickListener()
     {
       //实现事件处理方法
       @Override
       public void onClick(View v)
       {
         // TODO Auto-generated method stub
         show.setText("bn按钮被单击了!");
       }      
     });
  }
}
java Android

------解决方案--------------------
如果把它写在onCreate方法里,就需要是final了。
------解决方案--------------------
引用:
引用:如果把它写在onCreate方法里,就需要是final了。
注意到这个问题了,但为什么写在外面就不用final了呢?

这个问题对于我等菜鸟来说还是有点难以讲清楚的
对于外部类的成员变量不用添加final这个很容易知道
因为内部类保存了外部类的引用,内部类对其的修改都会真实
的反映到外部类的实例上!
至于onCreate方法中必须使用final是为了保持内外一致!
怎么个内外一致,我有点说不清,给个链接吧,感觉说的比较到位
http://www.blogjava.net/DLevin/archive/2011/11/23/364599.html