为什么方法中的内部类只能访问final修饰的局部变量

来源:互联网 发布:java读取文件编码格式 编辑:程序博客网 时间:2024/05/16 15:54

今天在做一个Android的强制用户下线功能遇到一点小问题

variable 'intent' is accessed from within inner class, needs to be declared final

在内部类中访问变量“intent”,需要声明为常量

第一种情况

public class BaseActivity   extends AppCompatActivity {  private ForceOfflineReceiver receiver;    @Override    public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {        super.onCreate(savedInstanceState, persistentState);        ActivityCollector.addActivity(this);    }    @Override    protected void onResume() {        super.onResume();        IntentFilter intentFilter = new IntentFilter();        intentFilter.addAction("com.123456");        receiver  = new ForceOfflineReceiver();        registerReceiver(receiver,intentFilter);    }    @Override    protected void onPause() {        super.onPause();        //判断是否为空        if (receiver != null){            unregisterReceiver(receiver);            receiver = null;        }    }    @Override    protected void onDestroy() {        super.onDestroy();        ActivityCollector.removeActivity(this);    }    class ForceOfflineReceiver extends BroadcastReceiver{        @Override        public void onReceive(final Context context, Intent intent) {            AlertDialog.Builder builder = new  AlertDialog.Builder(context);            builder.setTitle("警告");            builder.setMessage("你被强制下线,请重新登录");            //设置为不可取消            builder.setCancelable(false);            builder.setPositiveButton("是", new DialogInterface.OnClickListener() {                @Override                public void onClick(DialogInterface dialog, int which) {                    ActivityCollector.finishAll();//销毁所有活动                    Intent intent1 = new Intent(context,LoginActivity.class);                   // receiver = null;                    context.startActivity(intent);// 重启活动LoginActivity                }            });            builder.show();        }    }}

六十行左右处

  context.startActivity(intent);// 重启活动LoginActivity
报问题 

Variable 'intent' is accessed from within inner class, needs to be declared final

第二种情况

class InOut  {      String str=new String ("Between");      public void amethod(final int iArgs)      {          int it315=10;          class Bicycle          {              public void sayHello()              {                  System.out.println(str);                  System.out.println(iArgs);                  System.out.println(it315);//此处编译出错:InOut.java:13: local variable it315 is accessed from within inner class; needs to be declared final              }          }      }  }  


原因

局部变量的声明周期往往比对象短。


阅读全文
1 0
原创粉丝点击