社区
Android
帖子详情
匿名内部类访问外部的变量,老让加final怎么办
谁学逆向工程
2017-01-09 06:49:40
...全文
165
2
打赏
收藏
匿名内部类访问外部的变量,老让加final怎么办
[图片]
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
2 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
寒冰大神
2017-01-10
打赏
举报
回复
放外面去啊,改为全局变量。
java笔记 java笔记
java笔记java笔记,java笔记java笔记java笔记java笔记
匿名内部类
使用
外部
变量
为什么用
final
修饰
事实上,
匿名内部类
使用
外部
变量
时, 因为
匿名内部类
和
外部
变量
的生命周期不同, 此时
匿名内部类
中的该
变量
其实是原来
变量
的副本 方法内的
外部
变量
作用域: 当前方法
匿名内部类
引用
外部
变量
作用域:
匿名内部类
的方法 由此可见, 作用域不同, 即生命周期不同 如果不使用
final
修饰
外部
变量
, 那么在
匿名内部类
中修改
变量
引用时, 就会产生歧义, 好像在
匿名内部类
中可以修改已经不在作用域的
外部
变量
, 然后
外部
变量
的生命周期已经结束 @Test public void test() { // 外
匿名内部类
使用
外部
变量
为什么必须是
final
修饰的
本文来说下为什么
匿名内部类
使用
外部
变量
为什么必须是
final
修饰的 文章目录概述 概述
匿名内部类
引入
外部
变量
必须是
final
?
一、
匿名内部类
引入
外部
变量
必须是
final
? 主要原因是Java语言不支持闭包,所以如果不采用
final
类型的数据,很可能出现一种情况,就是方法执行完以后,局部
变量
就被消除了,但是
匿名内部类
的实例还可能存在,这个时候如果在去寻找
变量
,就会出现问题。所以,为了解决这个问题,
匿名内部类
只能使用
final
的
外部
变量
,因为
final
变量
会在编译期间直接替换为值,所以即使
外部
变量
已经不存在了,也不影响匿
Java
匿名内部类
使用的
外部
变量
,为什么一定要
加
final
?
这一切都是编译器为我们自动实现的,但对于开发者而言,体验上就会跟 Java 有明显的不同:“Java 需要。保证
匿名内部类
捕获的副本引用和
外部
的局部
变量
始终都指向同一个对象,也就是没有人可以修改它们的指向。捕获”,但这是一个错觉,实际上 Kotlin 也需要,只不过你看不到而已。内存泄漏的根本原因就是一个长生命周期的对象被一个短生命周期的对象所引用。所以虽然与 Java 的解决方式不同,但本质上看思想是一致的,,可以认为是 Kotlin 为了解决。注意:
匿名内部类
捕获的局部
变量
加
。,Kotlin 中还有。
Android
80,491
社区成员
91,376
社区内容
发帖
与我相关
我的任务
Android
移动平台 Android
复制链接
扫一扫
分享
社区描述
移动平台 Android
android
android-studio
androidx
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章