为什么匿名内部类参数必须为final类型
2016-04-13 09:42
281 查看
首先,这关系到java对象中的生命周期的问题。
基础数据类型和引用变量(不是被引用的对象)做局部变量时(这里是和做为变量成员变量区别,它们作为成员变量后就作为对象的一部分和对象的生命周期相同了);
它们的生命中周期是有作用域的,它没有受生命周期影响这一说,但是同样在这一作用域创建的对象的生命周期并不受作用域的限制。
局部变量的生命周期与局部内部类的对象的生命周期的不一致。
内部类里面使用外部类的局部变量时,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量时,外部方法的局部变量很可能已经不存在了,那么就得延续其生命,拷贝到内部类中,而拷贝会带来不一致性,从而需要使用final声明保证一致性。
复制保证生命周期延续,final保证引用一致。
基础数据类型和引用变量(不是被引用的对象)做局部变量时(这里是和做为变量成员变量区别,它们作为成员变量后就作为对象的一部分和对象的生命周期相同了);
它们的生命中周期是有作用域的,它没有受生命周期影响这一说,但是同样在这一作用域创建的对象的生命周期并不受作用域的限制。
局部变量的生命周期与局部内部类的对象的生命周期的不一致。
内部类里面使用外部类的局部变量时,其实就是内部类的对象在使用它,内部类对象生命周期中都可能调用它,而内部类试图访问外部方法中的局部变量时,外部方法的局部变量很可能已经不存在了,那么就得延续其生命,拷贝到内部类中,而拷贝会带来不一致性,从而需要使用final声明保证一致性。
复制保证生命周期延续,final保证引用一致。
相关文章推荐
- AppCompat does not support the current theme features:
- swift学习笔记1
- 解析js中( ( ) { } ( ) )的含义
- 自己开发的 漂亮音乐播放器
- ASP.NET-model验证
- Thinkphp框架、TP框架,Model跨模块使用
- An internal error occurred during: "Redeploy". Cannot change deployment state from ERROR to REDEPLOY
- 【数据结构】稀疏结构及稀疏矩阵的压缩存储,矩阵的(快速)转置
- unity3d优化总结篇
- 4种安卓自带的HTTP通讯方式(只是例子,网络通讯就随便写在主线)
- ion学习
- cache-2
- Async Task的使用详解
- cache-1
- 百度地图SDK5-基本设置
- 百度地图-设置中性点坐标
- Android 实现图片的圆角 (转)
- Java RandomAccessFile用法(转)
- 基础总结篇之五:BroadcastReceiver应用详解
- SSL协议详解