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