为什么方法中的内部类只能访问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
- 为什么方法中的内部类只能访问final修饰的局部变量
- 局部内部类为什么只能访问final修饰的局部变量
- 局部内部类只能访问方法内被final修饰的局部变量
- 为什么匿名内部类只能访问final修饰的变量
- 于java里方法的内部类只能访问被final修饰的局部变量和.
- 为什么局部内部类只能访问方法中final类型的局部变量?
- Java中为什么局部内部类只能访问方法中的final型成员变量
- 为什么在方法中定义的内部类只能访问方法中的final类型的局部变量?
- 为什么在方法中定义的内部类只能访问方法中的final类型的局部变量?
- 【转自JavaEye】为什么“局部内部类能且只能访问所在方法中的final类型的参数和变量”?
- 局部内部类为什么只能访问final局部变量?
- 局部内部类为什么只能访问final局部变量?
- 为什么局部内部类和匿名内部类只能访问final的局部变量?
- “局部内部类只能访问被final修饰的局部变量”的解释
- 局部内部类只能访问被final修饰的局部变量
- 局部内部类只能访问局部中被final修饰的变量
- 方法中的匿名内部类只能访问final类型的局部变量
- JAVA中内部类(匿名内部类)访问的局部变量为什么要用final修饰?
- zeromq源码学习——ypipe
- Java内部类
- Linux日常——信号(2)之阻塞信号
- 链表的创建
- Android listview item删除动画和item排序动画
- 为什么方法中的内部类只能访问final修饰的局部变量
- Java高级类特性一
- 常用办公网站和工具使用
- windows 下redis在后台运行
- AsyncTask
- 辅导报二本v是我的错轻微
- 找到链表中环的入口节点 java
- 录制,播放(recorder&playback)
- android studio知识笔记